есть код на C void foo(void); void main(){ foo(); } void foo(void){ return; } компилирует,линкуем...смотрим дизасм...там што то вроди j_foo PROC jmp _foo j_foo ENDP _main PROC push ebp mov ebp,esp call j_foo (*) mov esp,ebp pop ebp ret _main ENDP _foo PROC push ebp mov ebp,esp mov esp,ebp pop ebp ret _foo ENDP а как сделать што бы в (*) было сразу call _foo или как получить адрес самой функции, а не джампа на нее единственное што знаю - это написать #pragma alloc_text("sect",foo) и получить адрес начала секции
1) jmp'ы делаются в debug-версиях и отключаются не помню, чем. с оптимизацией их не будет. 2) а получить операнд jmp не судьба? проверяешь если там 0xe9 (jmp far) - берешь след. 4 байта - далее корректируешь отн. текущего места первого байта и получается адрес, куда идет прыжок.
zzz_nec Это все особенности конкретного линкеровщика. Мой на VC++ 6.0 выдал вот такой результат: Code: 00401000 >/$ 55 PUSH EBP 00401001 |. 8BEC MOV EBP,ESP 00401003 |. E8 08000000 CALL 1.00401010 00401008 |. 5D POP EBP 00401009 \. C3 RETN 0040100A CC INT3 0040100B CC INT3 0040100C CC INT3 0040100D CC INT3 0040100E CC INT3 0040100F CC INT3 00401010 /$ 55 PUSH EBP 00401011 |. 8BEC MOV EBP,ESP 00401013 |. 5D POP EBP 00401014 \. C3 RETN Как ты и хотел сразу прыжок на функцию