Tag: 汇编

如何在程序集中访问C预处理程序常量?

如果我在C .h文件中定义一个常量: #define constant 1 如何在程序集.s文件中访问它?

在ASM中,c编译器如何处理函数的结构返回值

在谈到C函数的返回值时,返回值存储在EAX寄存器中。 假设我们正在谈论32位寄存器,欢迎整数,但是当我们返回这些类型时会发生什么: long long , long double ,一个大于32位的struct / union 。

如何在Code :: Blocks中查看反汇编?

我读了这篇关于C / C ++的一些低级基础的文章 ,作者基本上是通过编译器生成的汇编代码逐行向我们展示的。 他正在使用VS 2010,但我没有,我使用Code :: Blocks。 如何查看那里的拆卸? 当我进入调试器,然后单击反汇编时,它会显示一个空白窗口… 这是我编译的C ++(。cpp)代码(整个代码): int main() { int x = 1; int y = 2; int z = 0; z = x + y; return 0; }

x86_64:堆栈帧指针几乎没用?

Linux x86_64。 gcc 5.x 我正在研究两个代码的输出,使用-fomit-frame-pointer和without(gcc at“-O3”默认启用该选项)。 pushq %rbp movq %rsp, %rbp … popq %rbp 我的问题是: 如果我全局禁用该选项,即使是在极端情况下编译操作系统,是否有一个问题? 我知道中断使用该信息,那么该选项仅适用于用户空间吗?

编译C文件时不支持的x86-64指令集错误

我正在尝试按照此链接中的教程。 当我开始编写test.c文件的部分时,我尝试运行第一个编译行。 gcc -c -g -Os -march=i686 -ffreestanding -Wall -Werror test.c -o test.o 这是test.c的内容 __asm__(“.code16\n”); __asm__(“jmpl $0x0000, $main\n”); void main() { } 当我调用第一个编译行时,它会显示此错误。 test.c:1:0: error: CPU you selected does not support x86-64 instruction set __asm__(“.code16\n”); ^ 谁能告诉我为什么会这样? 如果可能的话,如何修复它? 我正在运行Ubuntu Desktop x64,请提前感谢您的帮助。 编辑: 我已将第一个编译行更改为: gcc -c -g -Os -m32 -ffreestanding -Wall -Werror test.c -o test.o 它似乎工作正常。 […]

未定义的行为是否适用于asm代码?

假设您知道您的软件只能在两个补码机器上运行,其中已经很好地定义了带符号的溢出行为。 签名溢出仍然是C和C ++中未定义的行为,编译器可以自由地用“ret”替换你的整个程序,开始核战争,格式化你的驱动器,或让恶魔飞出你的鼻子。 假设您已在内联asm中签名溢出,您的程序是否仍然调用UB? 如果是,那么单独编译和链接汇编程序呢?

在Ubuntu上针对libusb-dev进行编译

我正在尝试编译libusb包提供的示例libusb.c(如果你是源代码。) 至少可以这么说。 #include #include #include 这导致它失败,没有libusb/libusb.h它是usb.h ,所以我改变了。 它以新的和创新的方式失败了。 我已经完全复制了文件,并将其命名为example.c 我正在使用这些命令和变体: gcc -o example example.c -lusb -L /usr/lib/libusb.a gcc -o example example.c -lusb -L /usr/lib/libusb.so 编译时遇到的错误是: example.c:25: error: expected ‘)’ before ‘*’ token example.c: In function ‘main’: example.c:46: error: ‘libusb_device’ undeclared (first use in this function) example.c:46: error: (Each undeclared identifier is reported only once example.c:46: […]

如何查看为C函数生成的汇编代码?

我需要查看为某些C函数生成的汇编代码,编译C代码时应该使用哪些标志? 编辑:使用G ++编译器,抱歉!

直接以二进制执行计算机指令

在C.我需要一种在程序运行时直接执行计算机指令的方法。 我知道如何以二进制编写指令的唯一方法是通过hex编辑器,然后将该文件作为应用程序运行。 如何使用程序编写二进制文件,然后从它们执行它而无需创建新的执行过程。 看起来他们应该是一个简单的方法来做到这一点,但无论我在哪里,我都找不到它。 我能想到的另一种方法是通过内联汇编,但在我当前的项目中,这将是一个缺点,直接使用二进制执行是最好的方法。 (这可能需要Windows上的驱动程序吗?如何在linux上执行?换句话说,跨平台方法会很好) 谢谢。

这段代码会损坏我的处理器吗?

一位朋友发给我该密码并声称它可能会损坏处理器。 真的吗? void damage_processor() { while (true) { // Assembly code that sets the five control registers bits to ones which causes a bunch of exceptions in the system and then damages the processor Asm( “mov cr0, 0xffffffff \n\t” “mov cr1, 0xffffffff \n\t” “mov cr2, 0xffffffff \n\t” “mov cr3, 0xffffffff \n\t” “mov cr4, 0xffffffff \n\t” […]