作者wlsabcd (())
看板ASM
标题Re: 请问在Visual C++中插入Machine Code
时间Sun Jul 29 14:32:32 2007
※ 引述《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
1F:→ sunneo:gcc用的是AT&T的 所以到MSVC的asm上暂存器的位置要反过来 07/29 15:52