第008課 彙編-操作[]
內容綱要
1.有效地址
2.暫存器存放記憶體單元地址
3.測試[]內所能存放的內容
詳細內容
1.有效地址
#define BaseAdd 0x1000000000
#define IM(a) [a]
MOV DWORD PTR ds:[BaseAdd+0X10100012ff70],0xaabbccdd
MOV DWORD PTR dS:[0X12ff70],[0X0012FFA0]
MOV DWORD PTR dS:[0X10100012ff70],[0X0012FFA0]
MOV DWORD PTR ds:[0X10100012ff70],IM(0X0012FFA000000)
<1>由所定義的巨集使得程式碼形式產生紊亂,功能不改變
<2>該編譯器情況下獲取記憶體單元地址從低位開始獲取32位即可,高位不足補0,超過32位不產生影響
2.暫存器存放記憶體單元地址
用暫存器來存放有效的記憶體單元地址,再將暫存器放入[]中,記憶體單元地址不可越界。
怎麼知道所要指向的地址是否越界呢?
3.測試[]內所能存放的內容
測試[]記憶體放兩個暫存器,3個暫存器或者更多而得出結論,改變EBP
課堂練習
1.有效地址
MOV DWORD PTR ds:[BaseAdd+0X10100012ff70],0xaabbccddeeff
MOV DWORD PTR dS:[0X12ff70],[0X0012FFA0]
MOV DWORD PTR dS:[0X10100012ff70],[0X0012FFA000000]
MOV DWORD PTR ds:[0X10100012ff70],IM(0X0012FFA000000)
2.對記憶體做操作
mov DWORD PTR ds:[edx+eax],0x00
mov DWORD PTR ds:[ebx+eax],0x00