代码之家  ›  专栏  ›  技术社区  ›  SSpoke

在“opcode”中获取错误内联汇编程序语法错误;找到“constant”

  •  0
  • SSpoke  · 技术社区  · 7 年前

    我得到了一个简单的代码,它毫无理由地给了我一个编译器错误。

    “opcode”中的内联汇编程序语法错误;找到“constant”

    DWORD connectFunctionAddressReturn = 0x775368F7;
    
    int __cdecl ws2_32_connect_hook_output(SOCKET s, const struct sockaddr *name, int namelen) {
        struct sockaddr_in *in = (struct sockaddr_in *)connect_name;
        printf("Attempting connect %d.%d.%d.%d : %d\n", in->sin_addr.S_un.S_un_b.s_b1, in->sin_addr.S_un.S_un_b.s_b2, in->sin_addr.S_un.S_un_b.s_b3, in->sin_addr.S_un.S_un_b.s_b4, htons(in->sin_port));
    }
    
    
    void __declspec(naked) ws2_32_connect_hook(void) { //ws2_32.connect = 775368F5
    
        __asm {
            PUSHAD //To be in safe environment
            PUSHFD //To be safe environment
    
            PUSH 0x10
            PUSH DWORD PTR SS:[EBP+0x8]
            PUSH DWORD PTR DS:[ESI+0x14]
            CALL DWORD PTR ws2_32_connect_hook_output  //<-- ERROR HERE
            ADD ESP, 0xC //clean __cdecl,4,8,C
    
            POPFD //Finish being in safe environment
            POPAD //Finish being in safe environment
            JMP connectFunctionAddressReturn // <-- ERROR HERE
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   SSpoke    7 年前

    解决了它,我定义了调用和JMP,所以它在asm代码中出错。

    #define CALL 0xE8
    #define JMP 0xE9
    
    推荐文章