Посл.ответ |
Сообщение |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 19 июня 2008 18:15 · Личное сообщение · #1
Пишу ф-цию cdecl соглашения, мне желательно сделать так, чтобы Delphi не вставляла свои пролог\эпилог к ф-ции? Помнится в с есть ключевое слово naked и программист сам потом может делать че хочет.
мне подобное надо на Delphi, может кто знает как это сделать?
----- My love is very cool girl. | Сообщение посчитали полезным: |
|
 Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25 Статус: Модератор retired
|
Создано: 19 июня 2008 18:44 · Личное сообщение · #2
Вместо begin вконопатить asm и не юзать параметры и переменный канает, вроде
| Сообщение посчитали полезным: |
Ранг: 122.2 (ветеран) Активность: 0.04↘0 Статус: Участник
|
Создано: 19 июня 2008 19:09 · Личное сообщение · #3
А почему бы не объявить эту ф-ю как cdecl?
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 19 июня 2008 19:16 · Личное сообщение · #4
egorovshura Объявил, но что-то со стеком кашмар
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 122.2 (ветеран) Активность: 0.04↘0 Статус: Участник
|
Создано: 19 июня 2008 19:36 · Личное сообщение · #5
theCollision пишет:
Объявил, но что-то со стеком кашмар
А какой код-то дельфи сгенерировал для этой ф-ии (CPU window)? И что за параметры передаешь? Может что-нить с динамическими массивами или поинтерами, там обычно легко ошибиться.
| Сообщение посчитали полезным: |
Ранг: 63.8 (постоянный), 2thx Активность: 0.03↘0 Статус: Участник
|
Создано: 19 июня 2008 21:06 · Поправил: drin · Личное сообщение · #6
procedure myproc; assembler;
asm
...
end;
Отсебятины от делфи внутри этого не будет
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 19 июня 2008 22:47 · Личное сообщение · #7
drin гы ))) а ты щас это напиши и погляди )
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 73.7 (постоянный), 22thx Активность: 0.04↘0 Статус: Участник
|
Создано: 20 июня 2008 02:19 · Поправил: XQuader · Личное сообщение · #8
Function myproc:integer;
asm
mov eax,0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
myproc;
end;
Написал и поглядел => в коде функции был ток mov eax,0 ;)
0044E1CC /$ B8 00000000 MOV EAX,0 ;myproc
0044E1D1 \. C3 RETN
0044E1D2 8BC0 MOV EAX,EAX
0044E1D4 . E8 F3FFFFFF CALL Project1.0044E1CC ; Button1Click
0044E1D9 . C3 RETN
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 20 июня 2008 06:16 · Личное сообщение · #9
XQuader а пролог то какой? (не могу сам посмотреть) почему-то мну кажецо, что пролог все же буит тот же..
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 20 июня 2008 08:42 · Личное сообщение · #10
XQuader попробуй объявить ф-цию по cdecl ?
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 73.7 (постоянный), 22thx Активность: 0.04↘0 Статус: Участник
|
Создано: 20 июня 2008 12:00 · Личное сообщение · #11
Ice-T
Нету ни пролога ни эпилога(это видно по коду,который я показал)
theCollision
Что с cdecl,что без него - код не изменился.
Если добавить какую-нить переменную,или усложнить код (Там IntToStr вызвать,то соответственно появляется пролог)
| Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 20 июня 2008 12:03 · Личное сообщение · #12
XQuader пишет:
Нету ни пролога ни эпилога(это видно по коду,который я показал)
ну ты верхних пару строчек не показал, вдруг там пролог =)
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 20 июня 2008 12:06 · Личное сообщение · #13
XQuader Гы, а я делал так:
function UnpackRoutine(aSource, aDestionation : Pointer) : Cardinal; cdecl;
----- My love is very cool girl. | Сообщение посчитали полезным: |
 Ранг: 793.4 (! !), 568thx Активность: 0.74↘0 Статус: Участник Шаман
|
Создано: 20 июня 2008 12:08 · Личное сообщение · #14
Ice-T
он же показал
0044E1D2 8BC0 MOV EAX,EAX
0044E1D4 . E8 F3FFFFFF CALL Project1.0044E1CC ; Button1Click
0044E1D9 . C3 RETN
А над ней показал его myfunc
Никакого пролога. Если ты имеешь ввиду пролог у myfunc, то это пох, так как пример приводится не с ней, а с ее вызовом.
----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: |
 Ранг: 793.4 (! !), 568thx Активность: 0.74↘0 Статус: Участник Шаман
|
Создано: 20 июня 2008 12:10 · Личное сообщение · #15
theCollision если не хочешь секса с делфи, то начни свою функцию с pop ebp
Тогда после генерации получится
push ebp
mov ebp, esp
pop ebp
Твой код
----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 20 июня 2008 12:21 · Поправил: theCollision · Личное сообщение · #16
PE_Kill с лишней командой :
u_FormMain.pas.53: POP EBP
0045FA64 5D pop ebp
u_FormMain.pas.54: PUSH EBP
0045FA65 55 push ebp
u_FormMain.pas.55: MOV EBP,ESP
0045FA66 89E5 mov ebp,esp
Спасибо, все решено это я с глупил! ;)
Надо было без begin в начале )
----- My love is very cool girl. | Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 20 июня 2008 12:26 · Личное сообщение · #17
с вызовом понятно, просто интересно есть он там или нет впринципе.. и если поменять asm на begin появится ли он или мб изменится просто адрес ф-ии на меньший..малоли чего в дельфи может быть
----- invoke OpenFire | Сообщение посчитали полезным: |
Ранг: 73.7 (постоянный), 22thx Активность: 0.04↘0 Статус: Участник
|
Создано: 20 июня 2008 12:26 · Личное сообщение · #18
Ice-T пишет:
ну ты верхних пару строчек не показал, вдруг там пролог =)
Собсно я показал саму myproc (то,что вызывается по кнопке) и там всего 2 команды,mov eax,0;retn; =)
(по аддресу 0044E1D4 начинается код Button1Click =>0044E1D4 . E8 F3FFFFFF CALL Project1.0044E1CC (а это адрес Myproc) =>
0044E1CC /$ B8 00000000 MOV EAX,0 ;myproc
0044E1D1 \. C3 RETN
| Сообщение посчитали полезным: |
Ранг: 309.8 (мудрец), 21thx Активность: 0.17↘0 Статус: Участник
|
Создано: 20 июня 2008 12:37 · Личное сообщение · #19
мона сделать при вызове:
type a = function(param :dword):bool;
...
func = a(dword(@function)+3);
a(xxx);
----- Shalom ebanats! | Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 20 июня 2008 12:40 · Личное сообщение · #20
PE_Kill вопрос, где и в каком месте справки написано про "POP EBP" ? ;)
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 16.9 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 20 июня 2008 14:18 · Личное сообщение · #21
Пример объявления функции на Дельфи без пролога\эпилога
Function RTDCS:Int64; register;
begin
asm
rtdcs
end;
end;
| Сообщение посчитали полезным: |
Ранг: 309.8 (мудрец), 21thx Активность: 0.17↘0 Статус: Участник
|
Создано: 20 июня 2008 15:00 · Личное сообщение · #22
rdtsc
----- Shalom ebanats! | Сообщение посчитали полезным: |
 Ранг: 793.4 (! !), 568thx Активность: 0.74↘0 Статус: Участник Шаман
|
Создано: 20 июня 2008 17:51 · Личное сообщение · #23
theCollision пишет:
где и в каком месте справки написано про "POP EBP" ?
Нигде, просто личный опыт, делфя не предназначалась для рипа.
----- Yann Tiersen best and do not fuck | Сообщение посчитали полезным: |
Ранг: 16.9 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 23 июня 2008 09:31 · Личное сообщение · #24
2 SLV
Постоянно буковки в этой команде путаю.
| Сообщение посчитали полезным: |