问题标签 [yasm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 如何在 Linux 上从 c 源代码生成 nasm 可编译的汇编代码?
测试平台为 32 位 Linux。
基本上,我知道 gcc 可以用来生成 Intel 和 At&T 风格的汇编代码,但似乎不能直接使用 nasm/tasm 来编译 gcc 生成的 Intel 风格的汇编代码。
我正在 Windows 和 Linux 平台上进行项目分析 asm 代码,所以我想如果它们都可以由 nasm\yasm 等平台独立的汇编程序编译,我可以有一个更轻松的时间......
所以我的问题是如何在 Linux 上从 c 源代码生成 nasm 可编译的汇编代码?
linux - linux 上 printf 的分段错误 ASM
以下是一本书(Introduction to 64 Bit Intel Assembly Language Programming for Linux,Seyfarth,2012 年)第 9 章中的程序。故障(在 gdb 中)是:
程序收到信号 SIGSEGV,分段错误。0x00007ffff7aa10a5 in __printf_size (fp=0x400400, info=0x0, args=) at printf_size.c:199 199 printf_size.c: 没有这样的文件或目录。
直到本章,我成功地使用以下内容“生成目标文件”,如推荐的那样,
进而,
这是从书中复制的程序(l 10 push rbp; 我首先rem'd ; 但结果相同):
在本章中的前一个程序(“Hello World”示例)发生类似的分段错误之后,我使用了
在这个程序之前一直有效。
assembly - 初始化 .bss 变量程序集
我已经声明了一个变量:
我想在我的程序中将它初始化为 value 255
。
编译时出现以下错误:
我在这里做错了什么?
assembly - 递归帕斯卡三角(组合函数)汇编
我正在尝试在汇编中编写递归组合函数( Yasm(类似于 nsam))。我不能使用循环、乘法或除法。
我确定我在正确的轨道上,但是一旦我点击第二个内部函数调用就会遇到问题。谁能帮助我并告诉我哪里出错了?
编辑:这是我更新的代码,它返回一个结果,但并不总是正确的。我想我一定有一点逻辑不正确。
这是我一直用作参考的 javascript 实现
assembly - make:循环依赖被丢弃
我已经在 stackoverflow 和其他 make 手册、网站上搜索了很长时间,但在 make 函数中找不到任何尾随空格或遗漏用法。你能帮我解决这个警告信息吗?
生成文件:
主.asm:
感谢您 :)
visual-studio - 自动安装 vsyasm
我正在尝试创建一种使用 Microsoft C++ 在 Windows 上构建 mpir 的自动化方法。一个必需的步骤似乎是安装vsyasm,所以我目前的小项目是创建一种自动化的方式来做到这一点,即可以通过批处理文件或程序完成而无需人工干预。
vsyasm 自述文件建议了三种方法:
第一个被 Windows 安全阻止。有什么不需要人工干预的方法吗?
第二种和第三种直接需要人工干预。是否有任何自动等效项,特别是如果您想最终从命令行而不是在 IDE 中构建项目?
我还有其他选择吗?
assembly - 在汇编程序中转换十进制值以输出
我正在研究 64 位汇编代码 (yasm),试图输出任意大的十进制值,以便它们正确读取,而不是奇怪或单个数字。我环顾四周,但似乎无法在线找到任何合适的解决方案。我的代码当前输出一个 2 值十进制数字(输出商,除以 10 时输出余数)。对于较大的值,我正在考虑一个 do-while 循环构造的思路,该构造将重复除以 10 并输出余数,而余数不为零。这种方法的问题是它会反向输出结果,增加了代码的复杂性来尝试反转它。有谁知道可行的解决方案?我查看了 aaa、aam 等,但我并不完全了解它们是如何工作的,并且怀疑这些仅可用于 32 位操作。
代码结构如下:
我正在计算一个阶乘值,试图显示 4 的输出!作为24和5!为 120。现在,目前我只能显示两个十进制值(由于某种原因,full_print 条件的第一部分被跳过,所以 3! 被打印为 06 而不是 6),但 24 被正确打印。我一直在绞尽脑汁寻找一种简单的方法来打印出 3 位数的十进制值,但它开始变得非常混乱。
compiler-errors - 为 FFMPEG 编译 libvpx 时出现编译错误
我正在我的 64 位 Ubuntu 14 机器上编译 FFMPEG。一切都编译得很好,除了 libvpx 库,它不断抛出错误:
我遵循了这个指南:https ://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 我不知道这个错误是什么意思,但是在某处读到用 NASM 编译 libvpx 被破坏了,但我不知道如何编译否则。安装 1.2 或 1.1 版没有任何区别。有任何想法吗?
c - 排序算法:组装
我正在用汇编语言(Linux,64 位,yasm)实现一个冒泡排序算法的函数。该函数在 C 文件中调用,其中数组和数组大小分别通过 rdi 和 rsi 传递给程序集。
该数组仅对整数进行排序。我用 Java 编写了冒泡排序并在那里进行了测试——它工作得很好。但是,当我通过 C 文件传递数组 {9,8,7,6,5,4,3,2,1,0} 时,输出为 {8,8,8,8,8,8,8, 8,8,9}。我用 gdb 进行了调试,但仍然看不到问题出在哪里。for 循环构造工作正常(rcx 和 rdx 功能正确)。似乎访问数组元素的方式可能存在问题。任何意见,将不胜感激。
c++ - 如何使用 gdb 调试使用 yasm 组装的代码?
我已经使用 yasm 进行代码汇编,并链接到我的 C++ 程序,但我无法在 gdb 中对汇编语言文件中的符号设置断点。
命令行可能不是非常有启发性,但我们开始吧:
一切顺利,程序运行。但是当我尝试将它加载到 gdb 中进行调试时,我似乎无法在 yasm 文件中的任何函数上放置断点。例如,我在那里有一个名为 MandelRect 的函数。这是 gdb 向我展示了它的调用位置,在 main 的某个地方:
这是 gdb 向我显示它的地址是什么:
这是 gdb 无法在其上放置断点:
如果我在正确的地址设置断点,当执行到达函数时,我无法逐条执行它。据我所知(被打扰),它只是从一个标签到另一个标签。
显然——好吧,也许吧?- 这与 gdb 坚持该文件是在没有调试的情况下编译的有关。但在相关的 .o 文件和二进制文件中似乎确实有符号:
那么我该如何解决呢?我误解了什么,还是yasm -g
坏了?有没有人设法让 yasm 的调试信息与 gdb 一起工作?
(系统是Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux
。)