Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объявить прототип ф-ции соглассно соглашению cdecl, прошу помощи ;) 
V
    Опции темы
EvilsInterrupt
Дата 19.6.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



Есть код:
Код

0101F0BA   57               PUSH EDI                                 ; Адрес куда распаковывать секцию
0101F0BB   FFB5 63050000    PUSH DWORD PTR SS:[EBP+563]              ; Адрес tmp`a
0101F0C1   E8 89020000      CALL <calc_.Func>                  ; хитрый механизм
0101F0C6   83C4 08          ADD ESP,8


а внутри:
Код

0101F34F > 55               PUSH EBP
0101F350   8BEC             MOV EBP,ESP
0101F352   60               PUSHAD
0101F353   55               PUSH EBP
0101F354   8B75 08          MOV ESI,DWORD PTR SS:[EBP+8]
0101F357   8B7D 0C          MOV EDI,DWORD PTR SS:[EBP+C]


Т.е. кажется это соглашение cdecl

С рипил ф-цию и обернул ее в такой прототип:
Код

function UnpackRoutine(aSource, aDestionation : Pointer) : Cardinal; cdecl; 
begin
  asm
    PUSH EBP
    MOV  EBP,ESP


и вызываю:
Код

    UnpackRoutine(lInSectionData, lTmpData );


В момент вызова UnpackRoutine lInSectionData содержит одно значение, но при загрузке в ESI там совершенно другое значение!

Видно проблема в том что надо вместо Pointer в прототипе что-то другое указывать , но что именно и как это победить ?

Очень прошу помочь ;)

Это сообщение отредактировал(а) EvilsInterrupt - 19.6.2008, 14:53
PM MAIL WWW ICQ Jabber   Вверх
Rennigth
Дата 19.6.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



EvilsInterrupt, врятли это из-за Pointer или не Pointer. Теже 4 байта, разницы никакой впринципе. Я в этом не силен, но может проблема в том что сама UnpackRoutine вызывается по умолчанию с register вроде...


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
EvilsInterrupt
Дата 19.6.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



Это уже эксперимент, ща поправлю, в начале стояло cdecl )
PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 19.6.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



Вобщем я вставил весь код-ф-ции из отладчика, но дельфи сама ставит пролог и эпилог ф-ции, т.е. убрал:
Код

PUSH EBP
MOV EBP,ESP

то сразу прошло на ок! ;) Ща пока с эпилогом мучаюсь )

Может кто знает аналог _naked - ф-ций в С на Delphi ?

Добавлено через 6 минут и 10 секунд
Вот эпилог:
Код

u_FormMain.pas.229: MOV  DWORD PTR SS:[EBP-$04],EDI    // EAX будет содержать результат ф-ции
0045FBA9 36897DFC         mov [ebp-$04],edi
u_FormMain.pas.230: POPAD
0045FBAD 61               popad 
u_FormMain.pas.234: end;      
0045FBAE 8BC3             mov eax,ebx
0045FBB0 5B               pop ebx
0045FBB1 5D               pop ebp
0045FBB2 C3               ret 

вот ну никак не пойму, а нафига Delphi eax и ebx портит ?

может все таки кто-то знает как вставить нативные данные ?
PM MAIL WWW ICQ Jabber   Вверх
EvilsInterrupt
Дата 20.6.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



Кароче решено, орел с cracklab.ru PE_Kill посказал решение и в итоге оно сводится К тому что надо писать без begin end; и в начале асм-вставки прописать pop ebp.

Код

function UnpackRoutine(aSrc, aDest : Pointer) : Cardinal; cdecl;
  asm
     pop ebp
..
 тута ваш нативный код выдранный из какой-либо программы )
..
  end;


видя pop ebp Delphi не будет делать пролог и эпилог ф-ции. Т.е. вы можете таким образом получить то что в си naked

Это сообщение отредактировал(а) EvilsInterrupt - 20.6.2008, 12:31
PM MAIL WWW ICQ Jabber   Вверх
bems
Дата 26.6.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



тут никогда ничего не было smile

Это сообщение отредактировал(а) bems - 26.6.2008, 18:01


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.