如果我的引导程序没有运行,我能猜出我的usb坏了吗?

时间:2017-05-16 14:17:14

标签: ubuntu x86 usb bootloader fasm

我在Ubuntu上,我做了一个简单的引导程序,只是简单地打印一个字符。

它适用于qemu-system-i386

看起来像这样:

start:
    mov ah, 0x0e
    mov al, '~'
    int 0x10
    jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa

我用

构建
fasm loader.asm img.bin

然后检查我的USB是否可用:

lsblk

检查我的usb在/ dev / sdc上可用后,我跑了

sudo dd if=img.bin of=/dev/sdc 
sync

最后检查dd是否写得好:

dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f

以上ndisasm print:

00000000  B40E              mov ah,0xe
00000002  B07E              mov al,0x7e
00000004  CD10              int 0x10
00000006  EBFE              jmp short 0x6
00000008  0000              add [bx+si],al
0000000A  0000              add [bx+si],al
repeats 0000...
000001FE  55                push bp
000001FF  AA                stosb

现在,我将这款USB用于32位处理器(Pentium M)的真正笔记本电脑。

但它一次又一次地重新启动。

所以,我的问题是:我能猜到我的USB坏了吗?

我不知道这是否与我的问题有关但是......这里还有一件事: 当我在没有插入usb的情况下运行follow命令时,

dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f

以上ndisasm print:

00000000  B40E              mov ah,0xe
00000002  B07E              mov al,0x7e
00000004  CD10              int 0x10
00000006  EBFE              jmp short 0x6
00000008  0000              add [bx+si],al
0000000A  0000              add [bx+si],al
repeats 0000...
000001FE  55                push bp
000001FF  AA                stosb
好像我插入了usb记忆棒。

你能给我一些建议吗?

感谢。 (我努力制定一个清晰而有用的问题。如果不是,请告诉我。)

编辑: 我用BPB测试过。 源代码看起来像这样(nop添加):

jmp start
nop
bpbOEM          db "TEST    "
bpbBytesPerSector:      DW 512
bpbSectorsPerCluster:   DB 1
bpbReservedSectors:     DW 1
bpbNumberOfFATs:    DB 2
bpbRootEntries:     DW 224
bpbTotalSectors:    DW 2880
bpbMedia:           DB 0xF0
bpbSectorsPerFAT:   DW 9
bpbSectorsPerTrack:     DW 18
bpbHeadsPerCylinder:    DW 2
bpbHiddenSectors:   DD 0
bpbTotalSectorsBig:     DD 0
bsDriveNumber:          DB 0
bsUnused:           DB 0
bsExtBootSignature:     DB 0x00
bsSerialNumber:         DD 0x00000000
bsVolumeLabel:          DB "           "
bsFileSystem:           DB "        "
start:
    mov ah, 0x0e
    mov al, '~'
    int 0x10
    jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa

我跑了:

fasm loader.asm img.bin
lsblk
sudo dd if=img.bin of=/dev/sdc 
sync
dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f

并打印:

00000000  EB3B              jmp short 0x3d
00000002  54                push sp
00000003  45                inc bp
00000004  53                push bx
00000005  54                push sp
00000006  2020              and [bx+si],ah
00000008  2020              and [bx+si],ah
0000000A  0002              add [bp+si],al
0000000C  0101              add [bx+di],ax
0000000E  0002              add [bp+si],al
00000010  E000              loopne 0x12
00000012  40                inc ax
00000013  0BF0              or si,ax
00000015  0900              or [bx+si],ax
00000017  1200              adc al,[bx+si]
00000019  0200              add al,[bx+si]
0000001B  0000              add [bx+si],al
0000001D  0000              add [bx+si],al
0000001F  0000              add [bx+si],al
00000021  0000              add [bx+si],al
00000023  0000              add [bx+si],al
00000025  0000              add [bx+si],al
00000027  0000              add [bx+si],al
00000029  0020              add [bx+si],ah
0000002B  2020              and [bx+si],ah
0000002D  2020              and [bx+si],ah
0000002F  2020              and [bx+si],ah
00000031  2020              and [bx+si],ah
00000033  2020              and [bx+si],ah
00000035  2020              and [bx+si],ah
00000037  2020              and [bx+si],ah
00000039  2020              and [bx+si],ah
0000003B  2020              and [bx+si],ah
0000003D  B40E              mov ah,0xe
0000003F  B07E              mov al,0x7e
00000041  CD10              int 0x10
00000043  EBFE              jmp short 0x43
repeats 0000...
000001FD  0055AA            add [di-0x56],dl

结果是一样的。 真机重新启动。

EDIT2: 这是一个发出哔哔声的引导加载程序。它适用于不同的USB,同一台计算机。

bits 16
org 0x7c00
jmp main
main:
    mov ax, 3
    int 0x10
    mov ah, 0x0e
    mov al, 'A'
    int 0x10
    mov al, 0xb6
    out 0x43, al
    mov al, 0xa9
    out 0x42, al
    mov al, 0x04
    out 0x42, al
    in al, 0x61
    mov ah, al
    or al, 011b
    test al, ah
    je done
    out 0x61, al
done:
    jmp $

    times 510-($-$$) db 0
    db 0x55
    db 0xaa
times 1474560 - ($-$$) db 0

0 个答案:

没有答案