我清楚地不明白這個imul究竟發生了什麼,因爲當我做計算時,我自己不會出現爲2.如果有人能解釋r/m形式,爲什麼imul越來越2我非常感謝它。imul使用DWORD PTR [reg + reg * nn]
esi和ebx都= 0x1。 * 4是參考字的大小,是否正確? (4是DWORD我認爲)? 最後一部分-0x4是位移?只是爲了增加或減少值?順便說一下,當我自己做計算時,如果你還沒有猜測,我會得到-2。
9: x/32xw $esp
0xffffd300: 0xffffd3f4 0x00000000 0xffffd338 0x08049226
0xffffd310: 0x00000001 0x00000002 0x00000006 0x00000001
0xffffd320: 0x00000002 0x00000006 0xffffd358 0x08048a83
0xffffd330: 0x0804b6d0 0x08049620 0xffffd358 0x08048a7a
8: /x $ebp = 0xffffd328
7: /x $ebx = 0x1
6: /x $ecx = 0x0
5: /x $edx = 0x0
4: /x $edi = 0x0
3: /x $esi = 0xffffd310
2: /x $eax = 0x2
1: x/10i $eip
=> 0x8048b79 <phase_2+49>: imul eax,DWORD PTR [esi+ebx*4-0x4]
0x8048b7e <phase_2+54>: cmp DWORD PTR [esi+ebx*4],eax
(gdb)
0x08048b7e in phase_2()
9: x/32xw $esp
0xffffd300: 0xffffd3f4 0x00000000 0xffffd338 0x08049226
0xffffd310: 0x00000001 0x00000002 0x00000006 0x00000001
0xffffd320: 0x00000002 0x00000006 0xffffd358 0x08048a83
0xffffd330: 0x0804b6d0 0x08049620 0xffffd358 0x08048a7a
8: /x $ebp = 0xffffd328
7: /x $ebx = 0x1
6: /x $ecx = 0x0
5: /x $edx = 0x0
4: /x $edi = 0x0
3: /x $esi = 0xffffd310
2: /x $eax = 0x2
1: x/10i $eip
=> 0x8048b7e <phase_2+54>: cmp DWORD PTR [esi+ebx*4],eax
0x8048b81 <phase_2+57>: je 0x8048b88 <phase_2+64>
感謝您的分解,我對uint32_t/uint8_t不熟悉,但我有一個想法,現在我會讀到它們。 – Gov
有更好的類型可以使用嗎?在這種情況下,我只是試圖指出32位和8位整數類型。 –
我敢肯定,你使用什麼是正確的,我仍然在這裏只是一個初學者,不知道的C,以及我應該。 – Gov