darkyu 发表于 2021-9-21 09:35

关于delphi汇编问题

BackAdr:= Pointer($00400000);
asm
push 101
call BackAdr
end;

BackAdr:= Pointer(GetAdr);
asm
push 101
call BackAdr
end;

上面第一个可以正常使用,下面就不行,GetAdr为遍历获取的模块基址,请问要怎么赋值呢{:1_932:}

雨林木风 发表于 2021-9-21 10:22

Vvvvvoid 发表于 2021-9-21 11:09

本帖最后由 Vvvvvoid 于 2021-9-21 11:10 编辑

BackAdr:= Pointer(GetAdr);
asm
push ebx
mov ebx,BackAdr
push 101
call ebx
pop ebx
end;

xiaoy 发表于 2021-9-21 15:21

BackAdr:= Pointer(GetAdr);
begin
asm
push 101
call BackAdr
end;
end;

最好不要直接用asm,然后要用或者加上pushad popad,注意堆栈平衡,不然会出现很多莫名其妙的问题

darkyu 发表于 2021-9-21 17:56

Vvvvvoid 发表于 2021-9-21 11:09
BackAdr:= Pointer(GetAdr);
asm
push ebx


不行 不知道为什么会CALL到一个奇怪的地方

darkyu 发表于 2021-9-21 17:56

xiaoy 发表于 2021-9-21 15:21
BackAdr:= Pointer(GetAdr);
begin
asm


不行 pushad popad也用了 不知道为什么会CALL到一个奇怪的地方

xiaoy 发表于 2021-9-21 21:35

darkyu 发表于 2021-9-21 17:56
不行 pushad popad也用了 不知道为什么会CALL到一个奇怪的地方

你直接OD挂上看一下不就知道哪里的问题了,地址错误肯定就是GetAdr的问题咯
页: [1]
查看完整版本: 关于delphi汇编问题