主题
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 时,返回值为0且GetLastError()为0。
通用错误(10xx)
| 返回值 | GetLastError | 说明 | 排查建议 |
|---|---|---|---|
-1001 | 1001 | 权限不足 / 未登录 | 调用 Login/Reg;检查 FeatureList 含 Asm |
-1003 | 1003 | 参数无效 | instance 无效等 |
参数与输入(50xx · 前置校验)
| 返回值 | GetLastError | 说明 | 排查建议 |
|---|---|---|---|
-5001 | 5001 | 窗口句柄无效 | type 1~6 远程执行需有效 HWND |
-5002 | 5002 | 无法获取窗口 PID | 窗口是否已销毁、跨会话 |
-5003 | 5003 | type 参数无效 | 有效范围为 0~6 |
-5004 | 5004 | 汇编输入为空 | 检查 asmStr 是否传入 |
-5016 | 5016 | 无法启用调试权限 | 以管理员运行或检查系统策略 |
汇编编译与机器码(50xx)
| 返回值 | GetLastError | 说明 | 排查建议 |
|---|---|---|---|
-5005 | 5005 | 汇编编译失败 | 检查语法、寄存器名、架构(32/64 位) |
-5006 | 5006 | 机器码格式无效 | 十六进制字节是否合法 |
-5007 | 5007 | 机器码解析失败 | 检查空格分隔的 hex 字符串 |
-5008 | 5008 | 生成的用户代码为空 | 汇编结果无有效指令 |
-5011 | 5011 | 按实际地址重新汇编失败 | baseAddr 相关相对寻址指令可能有问题 |
内存与代码布局(50xx)
| 返回值 | GetLastError | 说明 | 排查建议 |
|---|---|---|---|
-5009 | 5009 | 分配可执行内存失败 | 目标进程权限、内存模式配置 |
-5010 | 5010 | 指定地址空间不足 | baseAddr 非 0 时预留空间不够 |
-5012 | 5012 | 重编译后代码超出可用空间 | 缩短汇编或换用自动分配(baseAddr=0) |
-5013 | 5013 | 代码区与标志区重叠 | 内部布局异常,可重试或缩短代码 |
-5014 | 5014 | RIP 相对偏移超出范围 | 64 位下代码与标志地址距离过远 |
-5015 | 5015 | 写入目标进程内存失败 | 权限、保护进程、内存读写模式 |
-5017 | 5017 | 内存客户端未初始化 | 检查 MemoryMode / 驱动加载状态 |
执行与调度(50xx)
| 返回值 | GetLastError | 说明 | 排查建议 |
|---|---|---|---|
-5018 | 5018 | 执行入口地址无效 | 内存分配或地址计算异常 |
-5019 | 5019 | 创建远程线程失败 | OpenProcess 权限、目标进程状态 |
-5020 | 5020 | 注入进程事件通道调用失败 | type=2;需已 BindWindow 注入,检查 IPC |
-5021 | 5021 | 主线程排队执行失败 | type=3;Hook 注入状态、目标主线程是否可调度 |
-5022 | 5022 | 驱动执行汇编失败 | type 3/5/6 走驱动时;检查驱动加载与配置 |
-5023 | 5023 | 执行超时 | 目标进程卡顿、汇编死循环、适当增大等待 |
-5024 | 5024 | 读取返回值失败 | 目标进程崩溃或内存被回收 |
-5098 | 5098 | AsmCall 失败(通用) | 查看日志 |
-5099 | 5099 | 内部异常 | 联系支持并提供日志 |
