社区
汇编语言
帖子详情
JMP 后面的地址是怎么来的?
fbiboss
2008-02-25 08:59:01
有程序中用MyAdr := VirtualAllocEx(ProcessHandle, nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);分配了一段内存,内联汇编中怎么用MyAdr?
是不是可以直接使用?
...全文
398
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 跳转到一个内存地址,
应该是可以的
net hook 研究
要涉及一些反汇编的知识,作者也不是很懂,可以提供一些思路 public class Test { public void Test1() { Console.WriteLine("test1"); } } class Program { static void Main(string[] args) { var obj = new Te...
JMP
地址
计算
在某些时候需要在代码中写入
JMP
指令
JMP
二进制 =E9
比如我要
JMP
到 7777ABCD
貌似E9 后跟的是RVA
所以
目标
地址
=指令所在
地址
+指令长度+RVA
即如果在 00552df7处 要跳到7777ABCD
那么
RVA=7777ABCD-00552df7-5=77227DD1
即在00552df7处写入E977227DD1
汇编语言指令
jmp
:
jmp
short、
jmp
near ptr、
jmp
far ptr
jmp
short 是段内短转移指令,只修改IP的值,其机器码有2个字节,低8位是用于表示
jmp
的段内短转移指令的指令编码,高8位是用补码形式表示的位移信息,转移的范围:-128 ~ 127。
jmp
near ptr 是段内近转移指令,只修改IP的值,其机器码有3个字节,低8位是用于表示
jmp
的段内近转移指令的指令编码,高16位是用补码形式表示的位移信息,转移的范围:-32768~ 32767。
jmp
far ptr 是根据目的
地址
进行转移的段间转移指令(又称为远转移指令),可以同时修改CS和IP。
JMP
地址
公式推导
以上有个问题:为什么同样的汇编指令
JMP
12345678却对应不同的机器码呢? 首先,机器码E9表明这是一个近跳转(Near
Jmp
) 这里需要补充下相关知识:
JMP
分3种: ①短跳转(Short
Jmp
,只能跳转到256字节的范围内),对应机器码:EB ②近跳转(Near
Jmp
,可跳至同一段范围内的
地址
),对应机器码:E9 ③远跳转(Far
Jmp
,可跳至任意
地址
),对应机器码
速通汇编(五)认识段
地址
与偏移
地址
,CS、IP寄存器和
jmp
指令,DS寄存器
通常所说的
地址
指的是某内存单元在整个机器内存中的,把整个机器内存比作一个酒店,内存单元就是这个酒店的各个房间,给这些房间编的门牌号,类比回来就是内存单元的物理
地址
在第一篇介绍debug的命令时使用过很多命令,不知你还记得与否,可点击快速复习->接下来我用e命令和d命令进行两步操作:在[0000:0000]
地址
处写入一串数据"123456789abc",然后再用d命令读取以验证是否成功写入可以看到确实成功写入。
汇编语言
21,500
社区成员
41,619
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章