JMP 后面的地址是怎么来的?

fbiboss 2008-02-25 08:59:01
有程序中用MyAdr := VirtualAllocEx(ProcessHandle, nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);分配了一段内存,内联汇编中怎么用MyAdr?
是不是可以直接使用?
...全文
294 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangguo 2008-10-24
  • 打赏
  • 举报
回复
最近在学习PE文件结构,编程尝试修改程序入口地址AddressOfEntryPoint,对里面的JMP不了解,看了你们的发言,让我茅塞顿开。谢谢!
智能卡_Snooper 2008-02-25
  • 打赏
  • 举报
回复
俺手头没有OD,可能是那样
fbiboss 2008-02-25
  • 打赏
  • 举报
回复
是不是OD已经把 JMP 后面的地址变成绝对地址了?
智能卡_Snooper 2008-02-25
  • 打赏
  • 举报
回复
你要看的不是他的助记符,而是要看的是二进制代码,俺对32位不懂,只能用16位来举例了。

在16下,当前命令地址是0100,假设此条指令是jmp 0120,则此条命令长度为02,下一条指令地址为0102,从下一条要跳到0120相差 0120 - 0102 = 001e,所以jmp 0120的指令的实际存储的就是 eb 1e,如果你修改为 eb 1d,再反汇编代码就是变成jmp 011f
fbiboss 2008-02-25
  • 打赏
  • 举报
回复
用OD看到的JMP后面的地址是绝对地址吧????
智能卡_Snooper 2008-02-25
  • 打赏
  • 举报
回复
jmp的地址应该是目标地址与下一条地址相对偏移吧?比如在16位汇编下,jmp到下一条,其偏移量为0.
fbiboss 2008-02-25
  • 打赏
  • 举报
回复
我把一个进程的一条指令改成JMP MYADR,但是在MYADR那不是我申请的那段内存呀


是不是一定要先移到EAX,再JMP EAX
pig4210 2008-02-25
  • 打赏
  • 举报
回复
sure.
__asm
{
mov eax,MyAdr
}
as you wish.
BMCRNET 2008-02-25
  • 打赏
  • 举报
回复
没有用过
内联汇编

Jmp 跳转到一个内存地址,
应该是可以的
相关推荐
发帖
汇编语言

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
帖子事件
创建了帖子
2008-02-25 08:59
社区公告
暂无公告