Re: 請問在Visual C++中插入Machine Code

看板ASM (組合語言)作者 (())時間17年前 (2007/07/29 14:32), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《landicefu (Landice)》之銘言: : 之前查到inline assembly的用法是 : 插入以_asm開頭的區段 : _asm{ : } : 因為最近在研究x86內部架構 : 所以需要驗證我的machine code fetch正不正確 : 需要在程式裡插入machine code : 但是查不到語法是什麼 : 希望熟assembly的大大們可以幫忙 VC中加Machine code 我是不會, 但是gcc中我這邊有解,希望幫的上忙: /************************************************************************* * source code: code.c *************************************************************************/ int main(void) { /* * Assembly code mov register AX value to BX */ __asm__ volatile("mov %ax, %bx"); /* * Machine code mov register AX value to BX */ __asm__ volatile(".byte 0x66"); __asm__ volatile(".byte 0x89"); __asm__ volatile(".byte 0xC3"); return 0; } compile 方式: gcc -Wall -g code.c -o code 觀察方式: objdump -S code | less 會有這麼一段: int main(void) { 401050: 55 push %ebp 401051: 89 e5 mov %esp,%ebp 401053: 83 ec 08 sub $0x8,%esp 401056: 83 e4 f0 and $0xfffffff0,%esp 401059: b8 00 00 00 00 mov $0x0,%eax 40105e: 83 c0 0f add $0xf,%eax 401061: 83 c0 0f add $0xf,%eax 401064: c1 e8 04 shr $0x4,%eax 401067: c1 e0 04 shl $0x4,%eax 40106a: 89 45 fc mov %eax,0xfffffffc(%ebp) 40106d: 8b 45 fc mov 0xfffffffc(%ebp),%eax 401070: e8 1b 00 00 00 call 401090 <___chkstk> 401075: e8 a6 00 00 00 call 401120 <___main> /* * Assembly code mov register AX value to BX */ __asm__ volatile("mov %ax, %bx"); 40107a: 66 89 c3 mov %ax,%bx /* * Machine code mov register AX value to BX */ __asm__ volatile(".byte 0x66"); 40107d: 66 89 c3 mov %ax,%bx __asm__ volatile(".byte 0x89"); __asm__ volatile(".byte 0xC3"); return 0; 401080: b8 00 00 00 00 mov $0x0,%eax } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.175.145

07/29 15:52, , 1F
gcc用的是AT&T的 所以到MSVC的asm上暫存器的位置要反過來
07/29 15:52, 1F
文章代碼(AID): #16h3I1Jf (ASM)
文章代碼(AID): #16h3I1Jf (ASM)