链接c ++和汇编时出现分段错误

Pnelego

因此,我试图将一个简单的汇编脚本与c ++链接起来,到目前为止还没有运气。

汇编脚本

section .data
global getebx


getebx:
mov eax, 0x0
cpuid
mov eax, ebx
ret

C ++

#include <iostream>


extern "C" unsigned getebx();

int main (){

std::cout << (const char *)getebx()<< std::endl;
return 0;
}

为了构建,我只是在运行以下命令。

nasm -f elf32 cpuidtest.asm
g++ -m32 -g main.cc cpuidtest.o

当我运行可执行文件时,出现了分段错误(核心转储)错误。所以我的下一个直觉是将它带到gdb。这是它返回的内容:

   program received signal SIGSEGV, Segmentation fault.
   0xf7da0e86 in ?? () from /lib/i386-linux-gnu/libc.so.6

我该如何解决这个问题?先感谢您。

小丑

调用约定要求您必须保留一些寄存器。您的情况适用于ebx您应该修改代码以保存和恢复该代码,例如:

getebx:
push ebx
mov eax, 0x0
cpuid
mov eax, ebx
pop ebx
ret

另外,将代码放入该.data部分也不是最好的主意;)

此外,ebx它不包含字符串(指向char的指针),因此您不能像这样打印它。它包含4个字符,因此类似这样的效果更好:

int main (){
    unsigned ebx = getebx();
    std::cout << std::string((char*)&ebx, 4) << std::endl;
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C程序调用x86汇编函数时出现分段错误

来自分类Dev

在 C 中使用结构和指针时出现分段错误

来自分类Dev

打印链接列表时出现分段错误

来自分类Dev

exe C时出现分段错误错误

来自分类Dev

链接c和汇编

来自分类Dev

调用c函数时出现分段错误

来自分类Dev

写入文件时出现C分段错误

来自分类Dev

从向量擦除时出现C ++分段错误

来自分类Dev

C - 使用 strlen 时出现分段错误?

来自分类Dev

创建树时出现分段错误 (C)

来自分类Dev

使用QtCreator(C / C ++)的APPCRASH(调试时未出现)和分段错误

来自分类Dev

返回节点链接列表时出现分段错误

来自分类Dev

将文件读入链接列表时出现分段错误

来自分类Dev

将Rust staticlib与C链接后出现分段错误

来自分类Dev

汇编器和C代码之间的链接错误(MinGW)

来自分类Dev

在C ++中操作向量时出现分段错误

来自分类Dev

传递多维数组时出现分段错误,C ++

来自分类Dev

从C ++中的文件加载数据时出现分段错误

来自分类Dev

在C中实现反向功能时出现分段错误

来自分类Dev

尝试克隆函数时出现分段错误(在C中)

来自分类Dev

在C中初始化数组时出现分段错误

来自分类Dev

c-打开文件时出现分段错误

来自分类Dev

尝试引用指针时出现分段错误:C

来自分类Dev

使用链表中的指针结构时出现C分段错误

来自分类Dev

在C中使用pthread_join时出现分段错误

来自分类Dev

在Python中导入C ++共享对象时出现分段错误

来自分类Dev

c-访问虚拟内存时出现分段错误

来自分类Dev

在C ++中使用模板编写函数时出现了分段错误

来自分类Dev

运行我的随机ID生成时出现C ++分段错误

Related 相关文章

热门标签

归档