检测点3.1.2的问题
jmp 0ff0:0100,这个语句是跳到哪里了呀,我怎么看不懂了呢代码呢,图片呢(https://fishc.com.cn/thread-226351-1-1.html) 这是一个x86汇编指令,它表示跳转(jump)到指定的内存地址。这个地址由两个部分组成:0FF0(段地址)和0100(偏移地址)。这个指令用于将程序的执行流程转移到这个地址。
我们来计算一下这个地址。在x86架构中,物理地址是通过将段地址左移4位(乘以16)然后加上偏移地址来计算的:
物理地址 = (段地址 << 4) + 偏移地址
物理地址 = (0FF0 << 4) + 0100
将0FF0左移4位后得到FF00,然后加上0100得到10000。所以这条指令表示跳转到物理地址0x10000。
这个jmp指令让程序跳转到物理地址0x10000处执行代码。如果你在阅读汇编代码时遇到这个指令,你需要查看地址0x10000处的指令以了解程序接下来会执行哪些操作。 歌者文明清理员 发表于 2023-4-7 20:59
代码呢,图片呢(https://fishc.com.cn/thread-226351-1-1.html)
完全没看懂怎么上传图片
isdkz 发表于 2023-4-7 20:59
这是一个x86汇编指令,它表示跳转(jump)到指定的内存地址。这个地址由两个部分组成:0FF0(段地址)和010 ...
说实话,还是没看懂
liuming1978 发表于 2023-4-7 21:10
说实话,还是没看懂
前面有的例子,jmp 1000:3 是跳到内存段10000的第三号字节处,可是这个怎么又变以你说的这样了呢
本帖最后由 jackz007 于 2023-4-7 21:57 编辑
8086/8088 处理器的段地址:偏移地址到 20 位内存地址的计算公式为:
20 位内存地址 = 段地址 x 10h + 偏移地址
所以,对于地址 0ff0:0100,其对应的 20 位内存地址为 ff0h x 10h + 100h = ff00h + 100h = 10000h
可见,段地址:偏移地址与 20 位内存地址的对应关系并不唯一,1000:0000、0fff:0010、0ff0:0100、0fe0:0200、0ffe:0020、0fd0:0300、0ffd:0030 等不同的形式所表达的都是同一个内存地址 10000h。
所以,段 : 偏移 的具体外在形式并不重要,重要的是他们组合在一起所表达的内存地址才是最重要的! jackz007 发表于 2023-4-7 21:46
8086/8088 处理器的段地址:偏移地址到 20 位内存地址的计算公式为:
这个我看懂了,并且我也用二进制格式检验了一下,完全正确,谢谢
页:
[1]