社区
汇编语言
帖子详情
JMP 后面的地址是怎么来的?
fbiboss
2008-02-25 08:59:01
有程序中用MyAdr := VirtualAllocEx(ProcessHandle, nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);分配了一段内存,内联汇编中怎么用MyAdr?
是不是可以直接使用?
...全文
359
9
打赏
收藏
JMP 后面的地址是怎么来的?
有程序中用MyAdr := VirtualAllocEx(ProcessHandle, nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);分配了一段内存,内联汇编中怎么用MyAdr? 是不是可以直接使用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huangguo
2008-10-24
打赏
举报
回复
最近在学习PE文件结构,编程尝试修改程序入口地址AddressOfEntryPoint,对里面的JMP不了解,看了你们的发言,让我茅塞顿开。谢谢!
用户 昵称
2008-02-25
打赏
举报
回复
俺手头没有OD,可能是那样
fbiboss
2008-02-25
打赏
举报
回复
是不是OD已经把 JMP 后面的地址变成绝对地址了?
用户 昵称
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后面的地址是绝对地址吧????
用户 昵称
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 跳转到一个内存地址,
应该是可以的
VS debug下为什么多此一举
jmp
函数
地址
?
VS debug下为什么call 函数后,会
jmp
函数
地址
?多此一举? http://blog.csdn.net/viper/article/details/6332934 在写跑在main之前的时候,碰到了很奇怪的问题。 [cpp] view plaincopy int initBreak() { DebugBreak(
汇编
jmp
指令的理解与用法
这篇文章是在学习过程中对于转移
地址
偏移
地址
的理解以及网上缺乏帮助理解计算转移
地址
偏移
地址
的前提下诞生的。初次写知识点分享,如有误,请指出多包含。
JMP
是在编写程序中经常使用的指令,它的功能是转移到指令指定的
地址
执行相应的指令。实际用法如下: 1,段内直接转移 1)短转移
JMP
SHORT 转移
地址
标号 功能:改变IP;(即:(IP)=(IP)+8位位移量 其中:式子右边(IP)为
JMP
后第一个字节的偏移
地址
;8位位移量为
JMP
机器指令中EB后接的16进制数值。 下边我们通过一道例题理解JM
JMP
地址
计算
在某些时候需要在代码中写入
JMP
指令
JMP
二进制 =E9
比如我要
JMP
到 7777ABCD
貌似E9 后跟的是RVA
所以
目标
地址
=指令所在
地址
+指令长度+RVA
即如果在 00552df7处 要跳到7777ABCD
那么
RVA=7777ABCD-00552df7-5=77227DD1
即在00552df7处写入E977227DD1
汇编语言中短转移指令
jmp
short指令偏移
地址
计算
汇编语言中,
jmp
short指令是8位转移指令,可以修改ip寄存器的范围为-128~127 (8位补码的表示范围,因为偏移
地址
计算使用的是补码) 短转移指令的机器码格式为EB??,其中??表示8位偏移
地址
,接下来研究??的计算方法。 一、公式介绍 要计算
jmp
short的偏移
地址
,我们要记住公式: 偏移
地址
=标记处的偏移
地址
-CPU读完该
jmp
指令后的ip寄存器值 二、方法步骤 1.后跳转 我们引入MASM中的代码片段 DATAS SEGMENT DATAS ENDS CODES SEGMENT
64位下
JMP
远跳
地址
的计算方法
很简单,如果你分配的内存
地址
是64位的话。如: 504BEA0000, 根据我帖子里的回复,你可以这样 方法一: 48 B8 0000EA4B50000000 - mov rax,000000504BEA0000 FF E0 -
jmp
rax 指令和机器码: mov rax, 64位
地址
的机器码就是 “48 B8 64位
地址
的little-endian(需要64位即8个字节)”
jmp
rax 的机器码 FF E0 这个方法会占用12个字节。如果你还要保存rax寄存器内
汇编语言
21,497
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章