ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

  #2  
Старый 19.11.2007, 00:11
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

1) jmp'ы делаются в debug-версиях и отключаются не помню, чем. с оптимизацией их не будет.
2) а получить операнд jmp не судьба?
проверяешь если там 0xe9 (jmp far) - берешь след. 4 байта - далее корректируешь отн. текущего места первого байта и получается адрес, куда идет прыжок.
 
Ответить с цитированием

  #3  
Старый 19.11.2007, 01:00
GlOFF
Постоянный
Регистрация: 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
Как ты и хотел сразу прыжок на функцию
 
Ответить с цитированием

  #4  
Старый 19.11.2007, 11:05
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

это особенности линкера, как уже сказали.
посмотри документацию к линкеру
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уязвимости популярного Софта, или ловим невидимку А(-)ДР()мЕдиЧ.ехе Уязвимости 0 11.11.2007 16:31
Процедура определения набора экспортируемых функций в библиотеке (ассемблер) 0x0c0de С/С++, C#, Delphi, .NET, Asm 3 09.06.2007 20:50
Написание Shell-code на Asm slesh Авторские статьи 18 23.04.2007 00:26
4 экстренных функций у мобилы _GaLs_ Сотовый фрикинг 6 22.02.2007 19:45
Microsoft лишила многих клиентов одной из главных функций защиты Vista Helios Мировые новости 6 05.02.2007 10:15



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ