Цитата:
Сообщение от Sojang
Блин, что то не доходит до меня
Как можно заюзать это из с++?
|
А нафига Вы компилите под 386й?)
Качаете, например, fasm и пишите чето типа этого:
Код:
use64
push 0x7fffffff
ret
Компилите это:
Код:
fasm tramp.asm tramp.bin
Открываете в хексе аутпут и видите чето типа этого:
Берем эти замечательные байты и пихаем в сишную прогу. Должно получится чето типа:
Код:
unsigned char trampTemplate[ ] = {
0x68, //push
0x00, 0x00, 0x00, 0x00 //address
0xc3 //ret
};
Адрес кодируется, как беззнаковое 4х байтовое слово. В общем, через костыль и жопу, грубо говоря (вместо того, чтобы дать нормальную поддержку push 8bytes). Пляшем с бубном, вычисляем наш адрес.
Готовим трамплин (псевдокод):
Код:
unsigned char* tramp = new unsigned char[6];
memcpy(tramp, trampTemplate, 6);
((DWORD*)(&tramp[1]))* = adr;
А далее, как обычно, даем через VirtualProtect права на запись куска памяти, где будем переписывать код и пишем наш трамплин туда.