Надеюсь на подсказку. Шелл - код. Кернел получил, функции из таблицы экспорта получил, запускаю любую функцию, она соответственно затирает мои временные переменные находящиеся в стеке(в которые я записывал адреса функций и т.д.). Чё опять надо искать кернел и выбирать функции? Если их записывать в файл(допустим в свою таблицу функций и данных), так адрес на эту таблицу тоже затрётся. Может это где и было не нашёл, уж извините.
Ну в принципе можно сохранять адрес на таблицу в регистре потом его восстанавливать после вызова апишной функции, но мне кажется это неправильно
ну самое простое использовать в переменные Однако никто не любит это, т.к нужно 4*[кол.использ.функций] байт, а можно и встеке просто используй add esp,xxx///sub esp,xxx, где ххх - кол.использ.функций если только начинаешеь рекомендую первый способ, чтобы не заморачиваться на этом в начале, а как остальное заработает, оптимизируешь это. пост ИМХО(!)
Ну может я не правильно выразился(А может и правильно). Переменные у меня есть, т.к. я выдераю код скомпилированный VC++ со вставками ассемблера то у меня переменные -- [ebp-05] и т.д. Фишка в том, что при вызове API функции у меня данные по этим адресам, соответственно затираются Таблицу хочу использовать, чтобы при втором запуске не искать эти адреса, я их сохранил в файле и забыл. ну допустим : BOOL (_stdcall * _VirtualProtect)( LPVOID lpAddress, DWORD dwSize, DWORD flNewProtect, PDWORD lpflOldProtect ); (FARPROC &)_VirtualProtect=(FARPROC &) dwVirtualProtect; (* _VirtualProtect)((void *)ImageBaseLocal,...,......,&fl); или LoadLibraryA вызыватся. Всё равно.
что-то мы друг друга не понимаем. Ты говоришь о переменных в стеке, а я о переменных в коде. что-то вроде этого(я так юзал): api_1 dd ? api_2 dd ? тока учти что секция кода должна быть открыта для записи. call 4 ptr cs:[api_1] p.s. ты пишешь вирь на Си?
да разобрался, приходиться всё делать через ж. Я не пишу вирь. Просто по нужде я должен знать как это работает. С переменными там другая ситуация. Секция у меня нормально открыта для записи и для чтения. Просто в ассемблерных вставках я не могу инициализировать переменные(в коде dd,dw ..), и те переменные которые я могу инициализировать в C++, они ининициа-ся как переменные в стеке. Поэтому я счас постепенно всё равно перехожу к асму. И переменные создаю в своём месте. Спасибо за ответы.