HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

линковка функций в сишке
  #1  
Старый 19.11.2007, 00:00
zzz_nec
Новичок
Регистрация: 17.11.2007
Сообщений: 1
С нами: 9727026

Репутация: 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
С нами: 11042306

Репутация: 2726


По умолчанию

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

  #3  
Старый 19.11.2007, 01:00
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
С нами: 10531106

Репутация: 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
С нами: 10721066

Репутация: 4360


По умолчанию

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уязвимости популярного Софта, или ловим невидимку А(-)ДР()мЕдиЧ.ехе Уязвимости 0 11.11.2007 16:31
Процедура определения набора экспортируемых функций в библиотеке (ассемблер) 0x0c0de С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 3 09.06.2007 20:50
Microsoft лишила многих клиентов одной из главных функций защиты Vista Helios Мировые новости. Обсуждения. 6 05.02.2007 10:15



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


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




ANTICHAT ™ © 2001- Antichat Kft.