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有不有办法达到这个效果?

解决方案 »

  1.   

    你希望编译后的结果也是:push offset dz01 ?  可惜CPU不认识你写的 dz01
      

  2.   

    指向字符串。象这样的:
    push offset dz01;"acc"
      

  3.   

    如同ahjoe所说的那样吧,显示出符号。
    我先试试看。
      

  4.   

    0044E7C5   682C044500             push    $0045042C 
    这个并不是指针到字符串,我需要的是
    0044E7C5   682C044500             push offset $0048032f
    $0048032f这个地址必须是指针指向字符串的,这样才叫成功压入字符串.可是测试了好几次,总不是指向字符串的,压入字符串就不成功!是不是我编写的这段代码错了,希望朋友们帮忙重新编写一段程序,谢谢!
      

  5.   

    呵呵,两贴联合讨论吧:http://www.programfan.com/club/post-253991.html如果楼主有兴趣沿现有讨论成果继续讨论下去,请去上贴回复
      

  6.   

    dz01是一个指向指针的变量, offset dz01 表示的是指向这个变量的地址,也即这个地址存储了你想要的字符串
    的地址。如果你需要它指向的地址,你不应该用 offset ,而应该用它本身。而且它不应该被声明为string[100],
    应该被声明为Pchar:
    var
      dz01: Pchar;
    ...
    dz01 = ....
    ...
    push dz01