2012年2月22日 星期三

16 bit x86 op code 反組譯

以下分別是 objdump 和 bochs 反組譯的結果。

 1 objdump -dS c_init.elf
2
3 16b: 66 55 push %bp
4 16d: 66 89 e5 mov %sp,%bp
5 170: 66 83 ec 28 sub $0x28,%sp
6 int c=i+1;
7 174: 66 a1 e0 02 66 83 mov 0x836602e0,%ax
8 17a: c0 01 67 rolb $0x67,(%ecx)
9 17d: 66 89 45 f0 mov %ax,-0x10(%ebp)
10
11
12 bochs
13
14 0009016b: ( ): pushl %ebp ; 6655
15 0009016d: ( ): movl %esp, %ebp ; 6689e5
16 00090170: ( ): subl $0x00000028, %esp ; 6683ec28
17 00090174: ( ): movl %ds:0x2e0, %eax ; 66a1e002
18 00090178: ( ): addl $0x00000001, %eax ; 6683c001
19 0009017c: ( ): movl %eax, %ss:-16(%ebp) ; 67668945f0


 7  174:   66 a1 e0 02 66 83       mov    0x836602e0,%ax
17 00090174: (                    ): movl %ds:0x2e0, %eax      ; 66a1e002
18 00090178: ( ): addl $0x00000001, %eax ; 6683c001


opcode 都是 66 a1 e0 02 66 83, 可是因為解釋的方式不同, 反組譯的組合語言程式碼也不同, bochs 的結果才是我要的。所以 16 bit 的組合語言, objdump 可能有點錯誤, 不知道是否有參數可以設定?

objdump -m i8086 -dS c_init.elf
17c: 66 a1 e0 02 mov 0x2e0,%eax
180: 66 83 c0 01 add $0x1,%eax
184: 67 66 89 45 f0 mov %eax,-0x10(%ebp)
接近些了。


ref:
http://stackoverflow.com/questions/1737095/how-do-i-disassemble-raw-x86-code

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。