- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
[code]
// межстрочный асм в делфи
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
asm
jmp @code
@str: db 'Hello, world!', 0
@code:
xor ecx, ecx
xor ebx, ebx
mov ecx, 0
@start:
mov ebx, offset @str
push 0
push ebx
push ebx
push 0
call MessageBox
cmp ecx, 2
jne @start
end;
[/code]
Dr_Stertor 09.12.2016 18:29 # 0
bayan 09.12.2016 18:41 # +1
Наверное MessageBox не возвращает 2 (я верно понимаю что это fastcall в WINAPI и там в ecx вертают значение?)
Блядь, двойка это Cancel.
А там нет Cancle. Ты же передаешь type 0, а 0 это только OK.
Единицу переджай туда и жми cance.
Учись MSDN читать
https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
Dr_Stertor 09.12.2016 18:43 # 0
Что-то ты совсем не в тему написал.
MessageBox как и другие API возвращают результат в EAX. Не суть.
Я только хочу дважды показать, на результат не смотрю.
bayan 09.12.2016 18:47 # +2
это stdcall а не fast.
Ну так тогда MessageBox тебе тупо твой ecx сбрасывает
bormand 09.12.2016 18:45 # +4
Registers EAX, ECX, and EDX are designated for use within the function.
В общем, согласно stdcall, MessageBox не обязан сохранять значения регистров eax, ecx и edx. Если они для тебя важны - сохраняй их сам.
Dr_Stertor 09.12.2016 18:46 # 0
bormand 09.12.2016 18:47 # +2
bayan 09.12.2016 18:48 # +3
bormand 09.12.2016 18:51 # +2
bayan 09.12.2016 18:53 # +2
Там же еще важно кто стек чистит: колли или коллер. В каком-то асме (masm?) даже были макросы типа PROC где можно было указать конвенцию и не думать ни о чем.
Там были только C call и Pascal call.
Чуть не забыл: цимес в том, что в 64битном режиме там могут быть другие конвенции совсем)
Dr_Stertor 09.12.2016 18:59 # +1
bayan 09.12.2016 19:06 # +4
Прямо в доке было сказано в какие регистры что пихать
Один был кол конвеншен: регисторы
Dr_Stertor 09.12.2016 19:13 # +4
bormand 09.12.2016 19:03 # +2
А там соглашения вообще забавные... Наступить на грабли намного проще, чем в x86.
bayan 09.12.2016 19:05 # 0
Dr_Stertor 09.12.2016 18:52 # +1
bormand 09.12.2016 18:52 # +8
З.Ы. Напиши этот код на делфи, а потом почитай дизасм. Посмотришь, как компилятор эти проблемы решает.
inkanus-gray 25.12.2016 01:55 # +2
bormand 25.12.2016 07:28 # +1
inkanus-gray 25.12.2016 10:28 # +2
guest 09.12.2016 18:39 # −1
Dr_Stertor 09.12.2016 18:45 # 0
guest 09.12.2016 18:47 # 0
Dr_Stertor 09.12.2016 18:53 # +1
В гостях себя так не ведут.
guest 10.12.2016 15:36 # −1
Dr_Stertor 10.12.2016 17:23 # +1
AnalniyTerzatel 10.12.2016 21:36 # 0
https://www.pochta.ru/tracking
guest 10.12.2016 22:04 # 0
guest 10.12.2016 22:05 # 0
Psionic 10.12.2016 13:20 # −7
guest 10.12.2016 15:36 # +3
guest0 25.12.2016 02:35 # −1
barop 25.12.2016 03:55 # −1