Skip to content

AsmCall 错误码说明 - AsmCallErrorCodes

概述

AsmCall执行失败时返回负数,其绝对值即为错误码,与 GetLastError() / GetLastError() 返回值一致。

执行成功时返回 EAX/RAX 寄存器值(可为 0)。此时 GetLastError()0(SUCCESS)。

失败时建议同时调用:

  • GetLastError()GetLastError():获取错误码(正整数,如 5005
  • GetLastErrorString():获取中文说明(用完后 FreeStringPtr 释放)
cpp
long ret = ola.AsmCall(hwnd, asmCode, 0, 0);
if (ret < 0) {
    int err = GetLastError();           // 例如 5005
    int code = ret < 0 ? (int)(-ret) : err; // 与 GetLastError 一致
    char* msg = (char*)GetLastErrorString();
    // 根据 code 排查,见下表
    FreeStringPtr((int64_t)msg);
} else {
    // ret 为 EAX/RAX;若 ret==0 且 GetLastError()==0,表示成功且返回值为 0
}

区分成功返回 0 与失败:失败时返回值为负数(如 -5005),且 GetLastError() 非 0;成功且 EAX/RAX 为 0 时,返回值为 0GetLastError()0

通用错误(10xx)

返回值GetLastError说明排查建议
-10011001权限不足 / 未登录调用 Login/Reg;检查 FeatureList 含 Asm
-10031003参数无效instance 无效等

参数与输入(50xx · 前置校验)

返回值GetLastError说明排查建议
-50015001窗口句柄无效type 1~6 远程执行需有效 HWND
-50025002无法获取窗口 PID窗口是否已销毁、跨会话
-50035003type 参数无效有效范围为 0~6
-50045004汇编输入为空检查 asmStr 是否传入
-50165016无法启用调试权限以管理员运行或检查系统策略

汇编编译与机器码(50xx)

返回值GetLastError说明排查建议
-50055005汇编编译失败检查语法、寄存器名、架构(32/64 位)
-50065006机器码格式无效十六进制字节是否合法
-50075007机器码解析失败检查空格分隔的 hex 字符串
-50085008生成的用户代码为空汇编结果无有效指令
-50115011按实际地址重新汇编失败baseAddr 相关相对寻址指令可能有问题

内存与代码布局(50xx)

返回值GetLastError说明排查建议
-50095009分配可执行内存失败目标进程权限、内存模式配置
-50105010指定地址空间不足baseAddr 非 0 时预留空间不够
-50125012重编译后代码超出可用空间缩短汇编或换用自动分配(baseAddr=0)
-50135013代码区与标志区重叠内部布局异常,可重试或缩短代码
-50145014RIP 相对偏移超出范围64 位下代码与标志地址距离过远
-50155015写入目标进程内存失败权限、保护进程、内存读写模式
-50175017内存客户端未初始化检查 MemoryMode / 驱动加载状态

执行与调度(50xx)

返回值GetLastError说明排查建议
-50185018执行入口地址无效内存分配或地址计算异常
-50195019创建远程线程失败OpenProcess 权限、目标进程状态
-50205020注入进程事件通道调用失败type=2;需已 BindWindow 注入,检查 IPC
-50215021主线程排队执行失败type=3;Hook 注入状态、目标主线程是否可调度
-50225022驱动执行汇编失败type 3/5/6 走驱动时;检查驱动加载与配置
-50235023执行超时目标进程卡顿、汇编死循环、适当增大等待
-50245024读取返回值失败目标进程崩溃或内存被回收
-50985098AsmCall 失败(通用)查看日志
-50995099内部异常联系支持并提供日志

相关接口