Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

19.11.2007, 00:00
|
|
Новичок
Регистрация: 17.11.2007
Сообщений: 1
Провел на форуме: 2842
Репутация:
0
|
|
линковка функций в сишке
есть код на 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)
и получить адрес начала секции
|
|
|

19.11.2007, 00:11
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
1) jmp'ы делаются в debug-версиях и отключаются не помню, чем. с оптимизацией их не будет.
2) а получить операнд jmp не судьба?
проверяешь если там 0xe9 (jmp far) - берешь след. 4 байта - далее корректируешь отн. текущего места первого байта и получается адрес, куда идет прыжок.
|
|
|

19.11.2007, 01:00
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
zzz_nec Это все особенности конкретного линкеровщика. Мой на VC++ 6.0 выдал вот такой результат:
Код:
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
Как ты и хотел сразу прыжок на функцию 
|
|
|

19.11.2007, 11:05
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
это особенности линкера, как уже сказали.
посмотри документацию к линкеру
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|