注册 登录
编程论坛 C语言论坛

请问在c的内联汇编中怎么call一个具体的地址

a451410 发布于 2025-03-15 23:49, 126 次点击
比如我想call到7777ffff这个地方;
我直接写 call 0x7777ffff会报错,提示我不正确的操作数
但是在od里我是可以这样写的
如果我写成 call ds:7777ffff,反汇编时候就会变成 call dword ptr ds:[7777ffff],
但我并不想去到7777ffff这块内存所指向的地方,我就想直接去到7777ffff这个地方
到底我该怎么写才能call 7777ffff
2 回复
#2
a4514102025-03-15 23:52
经实验 我发现通过寄存器方法可以 如下
mov eax,7777ffff
call eax
但是我仍然不解,为什么不能直接call这个立即数.我记得在汇编语法中是可以直接call立即数的.
为什么在内联中不行,
除此之外,在内联中还会出现其他的奇怪问题,头大死了,到底怎样才能让c代码无缝调用汇编代码
请问有别的方式嵌入汇编吗

#3
随心2025-03-17 15:16
不能直接call立即数,只能call一个相对偏移。
你call 0x7777ffff,汇编器会认为 0x7777FFFF 是一个相对偏移,而不是绝对地址,所以会报错。
1