nasm反汇编

本文介绍了在Ubuntu系统中如何安装并使用NASM工具进行MBR的反汇编。通过`sudo apt-get install nasm`安装nasm,然后使用`dd`命令获取MBR,并用`ndisasm`进行反汇编,展示了MBR关键代码段的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ubuntu下安装nasm汇编工具:


sudo apt-get install nasm


反汇编MBR:

sudo dd if=/dev/sdb of=/tmp/sdb.mbr count=1

ndisasm -o0x7c00 ./sdb.mbr





mbr反汇编代码如下:


00007C00  FA                cli                                                          #清中断
00007C01  B80010            mov ax,0x1000                           
00007C04  8ED0              mov ss,ax                                        #ss->   0x1000
00007C06  BC00B0            mov sp,0xb000                           #sp->   0xb000
00007C09  B80000            mov ax,0x0
00007C0C  8ED8              mov ds,ax                                       # ds->   0x0
00007C0E  8EC0              mov es,ax                                       # es->   0x0
00007C10  FB                sti                                                         #  开中断
00007C11  BE007C            mov si,0x7c00                             #  ds:si   ->  0:0x7c00
00007C14  BF0006            mov di,0x600                               #  es:di   ->  0:0x600
00007C17  B90002            mov cx,0x200                              #  cs->   0x200
00007C1A  F3A4              rep movsb                                      #  while(cs>0)   ds:si  --> es:di      #即将mbr加载到0:0x600处:
00007C1C  EA21060000        jmp word 0x0:0x621           #  跳到0:0x621处,   也就是从0:0x7c21处复制到0:0x621的代码.


#以下的运行地址应由0x7cxx变成0x06xx


00007C21  BEBE07            mov si,0x7be                             # si--> 0x7be,    0x7be就是0x600 + 0x1be,   0x1be也就是mbr的0x1be偏移,也就是第一个主分区的活动标志,0x80/0x0
00007C24  3804              cmp [si],al                                       # if  (MBR[0x1be] == 0)    说明是非活动分区
00007C26  750B              jnz 0x7c33                                     #  如果是活动分区的话,则跳到0:0x7c33,   即找到了活动分区开始引导操作系统.
00007C28  83C610            add si,byte +0x10                      #  没有找到活动分区,指针移动16字节, 一个主分区记录正好是16字节。
00007C2B  81FEFE07          cmp si,0x7fe                            #  继续判断是否是0x80;
00007C2F  75F3              jnz 0x7c24                                     #  不是的话,继续进行。
00007C31  EB16              jmp short 0x7c49                         #  没有找到活动分区,则跳到0:0x7c49


00007C33  B402              mov ah,0x2                                   # ...   此处是读取操作系统引导代码。
00007C35  B001              mov al,0x1
00007C37  BB007C            mov bx,0x7c00
00007C3A  B280              mov dl,0x80
00007C3C  8A7401            mov dh,[si+0x1]
00007C3F  8B4C02            mov cx,[si+0x2]
00007C42  CD13              int 0x13


00007C44  EA007C0000        jmp word 0x0:0x7c00
00007C49  EBFE              jmp short 0x7c49                        # ...   死循环。加载操作系统失败。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值