【问题标题】:Interpreting the boot sector assembly code解释引导扇区汇编代码
【发布时间】:2021-09-03 09:54:14
【问题描述】:

我正在浏览 Nick Blundell 的 os-dev。在使用 NASM 编译 引导扇区 汇编代码后,他在此查看了 bin 文件中的十六进制数据。有没有办法手动解释所有 512 字节,只需查看代码。比如说,下面是代码

mov ah,0x0E

;First attempt
mov al,the_secret
int 10h

;Second attempt
mov al,[the_secret]
int 10h

;Third attempt
mov bx,the_secret
add bx,0x7c00
mov al,[bx]
int 10h

;Fourth attempt
mov al,[0x7c1e]
int 0x10

jmp $

the_secret: db "X"

times 510 - ($ - $$) db 0

dw 0xaa55

以上代码编译后生成一个512字节的bin文件。是否可以仅通过查看代码来确定所有 512 个字节?我认为这应该是可能的,否则他不会知道 the_secret 存在于 0x7c1e。 如果可能,请指导我阅读解释这部分的相关文章。谢谢

【问题讨论】:

  • 当然有可能......一切皆有可能......它可能会或可能不会很容易做到......像is it possible?is there any way?这样的问题总是有yes的答案,所以这样的问题是毫无意义的
  • @jsotola 至少对于上述代码是否可行?
  • @jsotola 是的,但这个问题的重点是我在网上没有找到任何解释。

标签: assembly x86 reverse-engineering bootloader mbr


【解决方案1】:

您是否尝试过使用ndisasm foo.bin?您将找到带有秘密地址的mov bx, 0x1d,以及另一个mov al,[0x7c1e]。然后您将查看该地址(0x7c00 加载地址)的反汇编,并查看字节。而且,它是无限循环跳转后的第一个字节,这也让它在一个非常明显的地方。

$ nasm foo.asm
$ ndisasm foo
00000000  B40E              mov ah,0xe
00000002  B01D              mov al,0x1d        ; use the address as an ASCII code...
00000004  CD10              int 0x10
00000006  A01D00            mov al,[0x1d]
00000009  CD10              int 0x10
0000000B  BB1D00            mov bx,0x1d
0000000E  81C3007C          add bx,0x7c00
00000012  8A07              mov al,[bx]
00000014  CD10              int 0x10
00000016  A01E7C            mov al,[0x7c1e]
00000019  CD10              int 0x10
0000001B  EBFE              jmp short 0x1b
0000001D  58                pop ax               ;;; This 0x58 is actually the ASCII code
0000001E  0000              add [bx+si],al
00000020  0000              add [bx+si],al
...
000001FE  55                push bp
000001FF  AA                stosb

看起来这个引导加载程序在启动时假定 DS = 0,但并没有费心将 DS 本身设置为与隐式默认值 org 0 匹配。较早的mov al,[0x1d] 将适用于另一种可能的 DS=0x07C0 情况。 (引导加载程序通常以 CS:IP = 07C0:00000000:7C00 开头,但我不确定 DS 通常是否设置为任何相关内容。最好不要假设。)

此外,从您发布的来源来看,秘密位于二进制文件的0x1d 偏移量,而不是0x1e。所以mov al,[0x7c1e] 是错误的。 mov al, [0x7c00 + the_secret] 会很有意义,并会进行调整以适应标签的最终位置。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多