![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Сразу опишу смысл патча.
В стеке проги когда eip = 4B4071 имеем следующее: esp + 0: arg4 ; аргумент 4 для последующего вызова функции. Мне же надо сделать так: esp + 0: arg4 esp + 4: myVal1 // мои параметры esp + 8: myVal2 // для дальнейшего вызова моей функции через много команд Естественно, esp переедет на 8 байт вниз. Делаю патчик: Код:
Код:
Вопрос: как в сях отключить автосохранение регистров при использовании асм-вставок? А то меня уже задолбало славливать баги в каждом третьем патче из-за того, что студия сама запушила регистр. Самое интересное, что в каких-то случаях она НЕ сохраняет (по закону мерфи, конечно, не сохраняет только тогда, когда сохранять как раз надо). З.Ы. суть в том, что один интерпретатор одного наркоманского скриптового языка имеет одно "замечательное" свойство: его разработчики забыли сделать обработку случая, когда функция возвращает строку. В этот момент интерпретатор падает с ошибкой. Я это пофиксил, добавив свой обработчик, но оптимизация интерпретатора убивает нужные мне значения, приходящие извне, в самом начале стандартного обработчика, а мой может вызваться только в конце работы стандартного. Спасает только вот такое вот решение. И сохранять можно только в стеке, т.к. обработчики рекурсивные, рекурсия вызывается между убийством нужных значений и вызовом моего обработчика, следовательно, глобальные переменные не катят (они будут перезаписываться при каждой рекурсии). jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 16.12.2012 в 21:03. |