![]() |
линковка функций в сишке
есть код на 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 выдал вот такой результат:
Код:
00401000 >/$ 55 PUSH EBP |
это особенности линкера, как уже сказали.
посмотри документацию к линкеру |
| Время: 13:48 |