问题标签 [intel-syntax]
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 - 错误:使用 Gas 组装时表达式后出现垃圾“0x7f”
我正在尝试编写一个 64 位 shellcode 来读取一个名为“/proc/flag”的文件。但是,我在编译程序集时遇到了一些随机错误,不知道为什么会发生。
这是我的汇编文件readflag.S
:
这些是我在编译程序集时遇到的错误:
我认为push byte 60
被认为是英特尔语法中的有效指令。我不确定错误来自哪里。将不胜感激任何帮助。
assembly - 如何知道汇编代码是否具有特定的语法(emu8086、NASM、TASM、...)?
我想知道如何通过查看示例源代码来识别使用的语法是 em8086、TASM 还是 NASM?我是组装新手..我想了解更多关于emu8086的信息。
assembly - 非内联汇编的标签
我只是想编写一些 ASM 代码并将其包含在 C/C++ 代码中,而不是通过内联模式,而是创建一个不同的 ASM 模块。我发现 CodeBlocks 项目允许 ASM 源,所以我遵循了这些步骤,实际上有一些细微的变化,比如构建命令:
一切似乎都有效,但标签。
这是一个例子:
当我尝试运行和调试该函数时,这就是我得到的:
这就像它识别mylabel
为一个新功能,将其后的所有代码都删掉了。我无法解释为什么它两次显示相同的代码,但即使没有标签也会发生,所以我认为它与它们无关(无论如何,为什么会发生这种情况?)。
然后我阅读了这个讨论,并尝试了那里列出的所有可能的解决方案,但没有成功。这是我尝试过的:
分别使用后缀
f
和b
表示前进和后退。用于
%=
本地标签.
即使没有在标签声明中也尝试过
为什么标签在内联汇编中起作用,而在我的情况下却不起作用?
编辑 感谢@fuz,现在我的代码正在运行。顺便说一句,尽管内存地址相同,但在调试窗口内,该函数被复制了两次。
x86 - X86 intel 语法 - mov 的大小不明确,表达式后的垃圾 h?
我正在使用 AT&T 语法,但我想我会尝试英特尔。我有这个代码:
哪个应该返回 0,对吗?在我转换它之前,它与 AT&T 一起使用。
我正在组装使用:
但我得到:
我在哪里错了?
assembly - GNU 汇编器 x86 指令后缀(如“mov.s”中的“.s”)如何工作?
GNU 汇编器似乎有一些方法可以控制为某些指令发出的操作码的替代形式。例如
处理上面的代码as test.s -o test.o && objdump -d test.o -M intel
给出以下反汇编:
我们可以看到.s
后缀似乎将89
操作码切换到8b
版本(并适当地更改了 ModRM 字节)。
这种语法在 GAS 中是如何工作的?我找不到任何相关文件。
assembly - x86 汇编中的方括号是什么意思?
我对组装很陌生,并且有一些非常基本的问题。
这四个命令有什么区别?
他们说括号的意思是“获取地址的值”。但是,那么,第一行真的有什么作用呢?它不会将eax的值移动到ebx中吗?如果是这样,那么括号的意义是什么?
assembly - 在没有 $$ 的情况下获取 GNU Assembly 中当前节的地址
NASM 文档描述了特殊令牌$
和$$
:
NASM 支持表达式中的两个特殊标记,允许计算涉及当前装配位置:$ 和 $$ 标记。$ 计算为包含表达式的行首的装配位置;因此您可以使用 JMP $ 编写无限循环。$$ 计算为当前部分的开头;所以你可以通过使用 ($-$$) 来判断你在该部分中的距离。
$
我了解如何通过在前一行声明标签并使用其地址来克服 GNU Assembly 中的缺失:
变成:
如何在没有 的情况下获取当前部分的地址$$
?
macos - 在 MacOS 上运行英特尔无前缀 x86-64 程序集
作为课程的一部分,我需要编写具有特定格式的汇编代码。老师称之为“Intel syntax x86-64”。我尝试使用给定的命令 ( gcc -O3 -o op sc.s
) 对其进行编译,尽管在 linux PC 上运行良好,但在 Mac 上却失败了。经过一些研究,我发现 Mac OS 不支持这种语法,并按照老师的建议,我尝试从可启动的 USB 密钥和虚拟机(使用 VirtualBox)上运行 Linux,但由于键盘兼容性问题,两者都失败了。我搜索了一些在线解决方案,但没有一个可以毫无问题地编译源代码。如何在不购买新计算机的情况下运行它?如果可能的话,我想运行这个确切的语法。
谢谢你读我!
这是他给我们的代码示例:
With 可以用 gcc 编译(实时显示)但用它编译gcc -o hw1 hw.s
或gcc -o hw1 -masm=intel hw.s
给我以下错误:
编辑:在虚拟机上设置 ssh 服务器并通过主机终端连接到虚拟机使使用 VirtualBox 变得更加容易,请参阅https://stackoverflow.com/a/10532299/5770818
assembly - 带有地址或寄存器的表,汇编器 x86
我必须在操作后写入寄存器的目的地和值。
用斜体字写的字段是我写的。用粗体字写的字段(如说明)是我的教授写的。
我曾尝试填写所有字段,但不确定答案。如果你能告诉我哪里出了问题,我会很高兴,谢谢!:)
assembly - AT&T 语法 hello world 有效,但 intel 语法无效
我正在使用 GAS 汇编器为 linux x86_64 编写一个 hello world 程序,这是我的 AT&T 语法代码。
这有效并打印“hello world”。这是英特尔语法:
这编译并运行良好,但不打印“hello world”。我假设错误在mov rsi, msg
?如果是这样,正确的语法是什么?