问题标签 [att]

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.

0 投票
1 回答
162 浏览

assembly - 语法常量(寄存器)是什么意思?

我正在学习英特尔 x86 架构的 AT&T 语法,但我对以下语法的含义有点不知所措:

  1. Shrb $1, 2(%esp)
  2. 增量 2(%esp)

我最初的解释是:

  1. esp = (esp + 2) >> 1
  2. esp = esp + 2

我找不到以这种方式使用增加的任何参考,这使我相信我在这里存在更多根本性的缺陷。

我的解释是正确的,还是我完全偏离了基础?感谢您的时间。

0 投票
1 回答
5635 浏览

assembly - jmp to 'variable' label in assembly (AT&T syntax)

I know this might sound stupid, but I'm new to assembly language, so please bear with me!

I have following assembly code, which is the simplified version of what I was trying to do.

THe question is, how do I jump to a some kind of "variable" label. (So sometimes I want to jump to this label, but some other times another label... that kind of idea.)

0 投票
1 回答
877 浏览

linux - 将 .org 指令与 .data 部分中的数据一起使用:与 ld 相关

在我努力了解如何使用 GNU binutils 使用 gas构建一个简单的引导加载程序时,我遇到了一个问题,你如何告诉链接器将你的数据放在哪里,在一个使用 .org 来推进位置计数器的文件中同时将文件大小保持在 512 字节。我似乎找不到办法做到这一点。

试图做到这一点的汇编程序是:


更新 使用以下命令,我收到以下错误:

0 投票
1 回答
9678 浏览

c - 新手asm:调用代码在哪里?

我写了这个简单的内核模块:

我试图了解代码是如何转换为 asm 的,所以我将其 objdumped:

但有些东西与其他东西并没有完全叠加......

printk 函数是如何调用的?我只能看到“callq 9”,而那个偏移量并没有告诉我任何东西..这是下一条指令..那又怎样?消息“Kello”被正确打印,但我找不到发生这种情况的代码!

此外..此代码如何访问 .rodata.str1.1 部分中的字符串“Kello etc..”?如果这是一个映射到 ds 寄存器的程序段,不应该像“ds:0”这样的东西来访问它吗?

我很困惑。。

0 投票
2 回答
1281 浏览

c - 内核崩溃引起的 Linux 系统调用(奇怪的偏移)

我正在尝试从内核模块调用系统调用,我有以下代码:

此代码不起作用并且正在使系统崩溃(它是一个内核模块)。

带有重定位信息的那段代码的转储是:

我想知道..为什么 49: R_X86_64_PC32 path-0x4 中有 -0x4 偏移量?

我的意思是:mode 和 dev 应该自动解决而没有问题,但是路径呢?为什么 -0x4 偏移量?

我试图用

lea 0x0(%rip),%rdi // 这以某种方式添加了 -0x4 偏移量 add $0x4, %rdi ....

但代码仍然崩溃。

我哪里错了?

0 投票
2 回答
678 浏览

c - 内联汇编未知

“d0”和“d1”是干什么用的?您能否完整地解释所有代码?谢谢!

0 投票
2 回答
730 浏览

macos - 基本汇编程序上的“非法指令” - 甚至不是你好世界 - 为什么需要链接?

我只是想通了这一点,但与其将我的新问题(“为什么?”)分成另一个问题,我认为最好将这个问题的解决方案和解释保持在同一页面上。

我正在编写一个基本的汇编程序,使用内核中断启动并立即退出int 0x80。我当前的代码如下:

组装在一起

执行后我得到一个单行错误:

Illegal instruction这很奇怪,即使没有任何说明,即使将所有内容都注释掉仍然会导致结果。linking尽管没有其他文件可以链接,但我是否错过了一步?我是

编辑:请允许我重新表述我的问题,当没有图书馆或任何要链接的东西时,为什么需要链接?

0 投票
1 回答
306 浏览

macos - 操作码的 AT&T 语法后缀是什么?

注意:我使用的是基于 BSD 的系统,所以如果我没记错的话,这意味着被调用的子例程/函数的 args 被推送到堆栈中,而不是放在寄存器中

我一直在尝试汇编,我想尝试我的简单内核退出程序:

在 64 位汇编中。

我记得读过一个很大的区别是寄存器现在被重命名为r前缀而不是 32 位标准的e前缀。

但是 64 位操作码的新后缀是什么,如果l已经意味着 32 位长?

出于好奇,为什么它是r新寄存器的前缀?

此外,如果有任何好的资源可以找到更多信息。或者教程,教程总是很有趣。

0 投票
2 回答
1881 浏览

macos - Mac OS X 运行时错误上的 64 位程序集:“dyld: no writable segment”和“Trace/BPT trap”

尝试运行以下汇编程序时:

我收到以下错误:

知道是什么原因造成的吗?32 位汇编中的类似程序运行良好。

0 投票
3 回答
1443 浏览

assembly - CPU 上推送和弹出操作数的必要性

为什么我们有 push 和 pop 之类的命令?

据我了解poppush基本上与分别执行 ( movthen add) 和 ( subthen mov)esp相同。


例如不会:

相当于:

如果堆栈访问不是(%esp-4),请纠正我,我还在学习组装


我能看到的唯一真正的好处是,如果同时进行这两项操作会提供一些优势;但是我不明白它怎么可能。