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數位生活區 即時熱門文章