| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Объявить прототип ф-ции соглассно соглашению cdecl |
| Автор: EvilsInterrupt 19.6.2008, 14:36 | ||||||||
Есть код:
а внутри:
Т.е. кажется это соглашение cdecl С рипил ф-цию и обернул ее в такой прототип:
и вызываю:
В момент вызова UnpackRoutine lInSectionData содержит одно значение, но при загрузке в ESI там совершенно другое значение! Видно проблема в том что надо вместо Pointer в прототипе что-то другое указывать , но что именно и как это победить ? Очень прошу помочь ;) |
| Автор: Rennigth 19.6.2008, 14:50 |
| EvilsInterrupt, врятли это из-за Pointer или не Pointer. Теже 4 байта, разницы никакой впринципе. Я в этом не силен, но может проблема в том что сама UnpackRoutine вызывается по умолчанию с register вроде... |
| Автор: EvilsInterrupt 19.6.2008, 14:53 |
| Это уже эксперимент, ща поправлю, в начале стояло cdecl ) |
| Автор: EvilsInterrupt 19.6.2008, 17:58 | ||||
Вобщем я вставил весь код-ф-ции из отладчика, но дельфи сама ставит пролог и эпилог ф-ции, т.е. убрал:
то сразу прошло на ок! ;) Ща пока с эпилогом мучаюсь ) Может кто знает аналог _naked - ф-ций в С на Delphi ? Добавлено через 6 минут и 10 секунд Вот эпилог:
вот ну никак не пойму, а нафига Delphi eax и ebx портит ? может все таки кто-то знает как вставить нативные данные ? |
| Автор: EvilsInterrupt 20.6.2008, 12:28 | ||
Кароче решено, орел с cracklab.ru PE_Kill посказал решение и в итоге оно сводится К тому что надо писать без begin end; и в начале асм-вставки прописать pop ebp.
видя pop ebp Delphi не будет делать пролог и эпилог ф-ции. Т.е. вы можете таким образом получить то что в си naked |
| Автор: bems 26.6.2008, 17:34 |
| тут никогда ничего не было |