首页
社区
课程
招聘
有没有懂X86汇编的,问个问题哈
发表于: 2023-11-25 13:38 2840

有没有懂X86汇编的,问个问题哈

2023-11-25 13:38
2840

long orig_Syscall(long num, void *arg0, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5) {
long ret;
asm volatile (
"movl %1, %%eax\n\t"
"movl %2, %%ebx\n\t"
"movl %3, %%ecx\n\t"
"movl %4, %%edx\n\t"
"movl %5, %%esi\n\t"
"movl %6, %%edi\n\t"
"movl %7, %%ebp\n\t"
"int $0x80\n\t"
"movl %%eax, %0\n\t"
:"=r"(ret)
:"r"(num), "r"(arg0), "r"(arg1), "r"(arg2), "r"(arg3), "r"(arg4), "r"(arg5)
:"%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi", "%ebp"
);
return ret;
}
然后用Androidstudio编译时候出现
error: inline assembly requires more registers than available

查过很多资料,说将libavutils/x86/asm.h中#define HAVE_7REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE && HAVE_EBP_AVAILABLE))修改为#define HAVE_7REGS (ARCH_X86_64)的方式可以编译通过,但都没这个文件,ndk文件内容搜索也没有HAVE_EBX_AVAILABLE

似此怎生奈何?


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 101
活跃值: (302)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ebp是不能用作参数寄存器的
参考
https://blog.csdn.net/m2o2o2d/article/details/21648777
2023-11-25 18:13
0
雪    币: 5
活跃值: (1080)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
leekong ebp是不能用作参数寄存器的 参考 https://blog.csdn.net/m2o2o2d/article/details/21648777
还是不行,删除ebp也不行,大佬,你那边只编译我这个函数能编译的过去吗,要怎么改才可以
2023-11-26 00:12
1
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
x86是Android发明的吗?用Android那一套东西去开发x86是不是点扯淡了?
2023-11-26 03:56
1
游客
登录 | 注册 方可回帖
返回
//