首页
社区
课程
招聘
这个函数用高级语言怎么写?
发表于: 2004-8-3 13:14 3987

这个函数用高级语言怎么写?

2004-8-3 13:14
3987
PUSH DWORD PTR DS:[1C11038]
PUSH EBX                    
PUSH EAX                    
PUSH EAX                    
CALL DWORD PTR DS:[1C1103C]
ADD ESP,4                  
PUSH DWORD PTR DS:[EAX+4]   
PUSH DWORD PTR DS:[EAX]

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不知道为什么是add esp,4
而函数调用前如何是push 4 次,需要再跟进函数的调用,确定是C call, std call还是pascal call, system call,还要确定参数传入,之后才好高级翻译
2004-8-3 13:59
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用DELPHI的内嵌汇编已经搞定,不过我还是不会用高级语言来写

procedure _GetA; stdcall; external 'a.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  p, p2: Pointer;
begin
  s := Edit1.Text;
  p := @s[1];
  asm
    mov eax, p;
    push 0;
    push 0;
    push eax;
    push eax;
    call GetA;
    mov ecx, [eax];
    mov p, ecx;
    mov ecx, [eax + 4];
    mov p2, ecx;
  end;
  Label1.caption := String(PChar(p)) + String(PChar(p2));
end;

谁会? 告诉我吧,谢谢啦
2004-8-3 14:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
知道函数调用,函数参数就可以写
2004-8-3 14:12
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果什么都知道,那当然没问题,COPY一下就可以了,问题是OD只告诉我这么多

调用前压入4个参数,调用后在EAX和EAX+4有两个DWORD值,指向两个字符串

我不太想用内嵌汇编,想用纯PASCAL,现在不知道在DELPHI怎么处理这个返回
2004-8-3 14:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 apojie 发布
如果什么都知道,那当然没问题,COPY一下就可以了,问题是OD只告诉我这么多

调用前压入4个参数,调用后在EAX和EAX+4有两个DWORD值,指向两个字符串

我不太想用内嵌汇编,想用纯PASCAL,现在不知道在DELPHI怎么处理这个返回

你可以跟进那个函数啊,跟进了就一定能知道它是C ,std, pascal, 当然在一般程序里面是不会出现system call格式的函数。这样就能确定它的函数参数入stack的顺序,决定究竟有几个是参数,否则没办法知道为什么push 了4次,又add esp only 4。一般来说在函数调用之后add esp ,xxx,是extern"C"的函数,
2004-8-3 18:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 apojie 发布
PUSH DWORD PTR DS:[1C11038]
PUSH EBX
PUSH EAX
PUSH EAX
CALL DWORD PTR DS:[1C1103C]
ADD ESP,4
PUSH DWORD PTR DS:[EAX+4]
PUSH DWORD PTR DS:[EAX]

最后两statement are push the member of a structure returned by the func call into the stack,
the structure can be represented as
typedef struct {
bits32_t   firstmember;
bits32_t   secondmember;
}
2004-8-3 18:51
0
游客
登录 | 注册 方可回帖
返回
//