嵌入式汇编和机器码的反汇编

本文探讨了在0.11 Linux中遇到的一段嵌入式汇编代码及其在bochs 2.1.1版本中的反汇编问题。作者在调试过程中发现第4行和第7行的代码对应关系存在疑惑,特别是关于al寄存器与内存之间的操作。在进一步使用bochs 2.3.7版本调试后,发现可能是早期版本的反汇编器出现了错误,新版bochs的反汇编结果显示为正确行为。
摘要由CSDN通过智能技术生成

以下程序是0.11 Linux中的一段嵌入式汇编代码

#define __set_tssldt_desc(n, addr, type) \
__asm__ ("movw $104, %1\n\t" \
         "movw %%ax, %2\n\t" \
         "rorl $16, %%eax\n\t" \
         "movb %%al, %3\n\t" \
         "movb $"type ", %4\n\t" \
         "movb $0x00, %5\n\t" \
         "movb %%ah, %6\n\t" \
         "rorl $16, %%eax" \
         :
         :"a"(addr), "m"(*(n)), "m"(*(n+2)), "m"(*(n+4)), \
          "m"(*(n+5)), "m"(*(n+6)), "m"(*(n+7)) \
        )

我在用bochs 2.1.1版本debug的过程中,看到这段代码对应的实际执行的机器码及其反汇编代码如下:

000072c4: (                    ): mov dword ptr ss:[ebp+0xfffffffc], 0x1847c ; c745fc7c840100
000072cb: (                    ): mov eax, dword ptr ss:[ebp+0xfffffffc] ; 8b45fc
000072ce: (                    ): opsize mov word ptr [ds:0x5cd8], 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值