Re: 請問在Visual C++中插入Machine Code
※ 引述《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
07/29 15:52, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章
0
18