首页
社区
课程
招聘
[求助]Delphi内嵌汇编遇到JE JNZ 等
发表于: 2012-9-7 21:25 6953

[求助]Delphi内嵌汇编遇到JE JNZ 等

2012-9-7 21:25
6953
如题

内嵌汇编

如果是JMP到一个远值,那么我就申明一个全局变量 或局部都可以

比如

Var
  aaa:Dword=$00500000;

内嵌时

asm
  JMP aaa
end;

这样就没问题了,

但是遇到了JE 比如原语句是  JE 00500000

我在Delphi里 不管是全局变量 或者 什么方法都用了不可编译

所以只好如下
Var
  aaa:Dword=$00500000;

JE @a
  JMP @b
@a:
  JMP aaa
@b:
....

很无奈..没别的方法了吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
je和任何条件跳转,一般是8位偏移量。而delphi好象只编译为8位偏移量吧。如果要支持32位偏移量,那编译的机器代码就是另外一种了,好象是0fXX XXXXXXXX要占6个字节。而一般是74 xx,只占2个字节。可能delphi只能生成74 xx这种2个字节的机器指令。
这种假设可能也不对。我又想了一下,应该是je和任何条件跳转,只能跳转偏移量,你如果要跳转到固定地址,那么偏移量为固定地址-je指令的当前地址,而je指令的当前地址是随着载入内存的位置不同而重定位的,所以不能生成je (偏移量xxxxxx)的指令,因为xxxx是变化的啊。而jmp可以jmp到固定地址,比如jmp [401008],而内存401008存储的就是500000,那么不管jmp的指令本身的地址如何重定位,都是jmp到500000这个固定地址,总结来说,就是je和任何条件跳转不能跳转到固定地址,而jmp可以jmp [xxxx],也可以jmp eax等等,所以可以跳转到固定地址。
2012-9-8 13:09
0
雪    币: 107
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
aait  你说的太对了  因为在OD下也不能那么跳  JE [00401000]  JE EAX  都不行
2012-9-8 20:15
0
游客
登录 | 注册 方可回帖
返回
//