DELPHI 内联asm 压入字符串新问题。以前我没太注意,今天一个朋友问我DELPHI压入字符串,我随手给它编了一段代码:var
Form1: TForm1;
dz01:string[100];
implementation
procedure ptgj;stdcall;
begin
dz01:='attack';
asm
pushad
mov ebx,$754ea4
mov ecx,dword ptr ds:[ebx]
push offset dz01
mov ebx,$430FD0
call ebx
popad
end;
end;下面是以上DELPHI代码反汇编结果
0044E7BC 60 pusha
0044E7BD BBA44E7500 mov ebx, $00754EA4
0044E7C2 3E8B0B mov ecx, ds:[ebx]
0044E7C5 682C044500 push $0045042C
0044E7CA BBD00F4300 mov ebx, $00430FD0
0044E7CF FFD3 call ebx
0044E7D1 61 popa
0044E7D2 C3 ret而达不到ASM的偏移指针(压入字符串)的效果
DELPHI 效果:0044E7C5 682C044500 push $0045042C
要达到的效果:0044E7C5 682C044500 push offset dz01有不有办法达到这个效果?
Form1: TForm1;
dz01:string[100];
implementation
procedure ptgj;stdcall;
begin
dz01:='attack';
asm
pushad
mov ebx,$754ea4
mov ecx,dword ptr ds:[ebx]
push offset dz01
mov ebx,$430FD0
call ebx
popad
end;
end;下面是以上DELPHI代码反汇编结果
0044E7BC 60 pusha
0044E7BD BBA44E7500 mov ebx, $00754EA4
0044E7C2 3E8B0B mov ecx, ds:[ebx]
0044E7C5 682C044500 push $0045042C
0044E7CA BBD00F4300 mov ebx, $00430FD0
0044E7CF FFD3 call ebx
0044E7D1 61 popa
0044E7D2 C3 ret而达不到ASM的偏移指针(压入字符串)的效果
DELPHI 效果:0044E7C5 682C044500 push $0045042C
要达到的效果:0044E7C5 682C044500 push offset dz01有不有办法达到这个效果?
解决方案 »
- 像屏保判断键盘鼠标是否移动 时间的不准确性????急。。。。。
- 怎样判断打印机是否在线,也就是电源是否打开(加了打印服务器的,打印机通过网线连接)
- 关于参数sender
- 检测ADOCONN是否登陆出错.
- delphi里面写sql语句好烦啊
- 设置ClientSocket.Active:=true;报“……目标机器积极地拒绝它”,为什么?怎样才能不报?
- 过年又不能回家了,烦,散分!!
- 怪问题,我用DBgrid作为输入界面,输入几条记录后,突然其中的几条记录自动被重复一次,后台数据库表中看输入的记录又是正常的?为什么?
- 紧急求助,若为有效回答送分50
- 关于API函数功能实现的问题(急!!!!)
- 如何获取IE中选择的文本内容?
- 请问同机双屏显示如何控制系统显示属性是否扩展功能选择框????
push offset dz01;"acc"
我先试试看。
这个并不是指针到字符串,我需要的是
0044E7C5 682C044500 push offset $0048032f
$0048032f这个地址必须是指针指向字符串的,这样才叫成功压入字符串.可是测试了好几次,总不是指向字符串的,压入字符串就不成功!是不是我编写的这段代码错了,希望朋友们帮忙重新编写一段程序,谢谢!
的地址。如果你需要它指向的地址,你不应该用 offset ,而应该用它本身。而且它不应该被声明为string[100],
应该被声明为Pchar:
var
dz01: Pchar;
...
dz01 = ....
...
push dz01