问题标签 [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.
assembly - 语法常量(寄存器)是什么意思?
我正在学习英特尔 x86 架构的 AT&T 语法,但我对以下语法的含义有点不知所措:
- Shrb $1, 2(%esp)
- 增量 2(%esp)
我最初的解释是:
- esp = (esp + 2) >> 1
- esp = esp + 2
我找不到以这种方式使用增加的任何参考,这使我相信我在这里存在更多根本性的缺陷。
我的解释是正确的,还是我完全偏离了基础?感谢您的时间。
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.)
linux - 将 .org 指令与 .data 部分中的数据一起使用:与 ld 相关
在我努力了解如何使用 GNU binutils 使用 gas构建一个简单的引导加载程序时,我遇到了一个问题,你如何告诉链接器将你的数据放在哪里,在一个使用 .org 来推进位置计数器的文件中同时将文件大小保持在 512 字节。我似乎找不到办法做到这一点。
试图做到这一点的汇编程序是:
更新 使用以下命令,我收到以下错误:
c - 新手asm:调用代码在哪里?
我写了这个简单的内核模块:
我试图了解代码是如何转换为 asm 的,所以我将其 objdumped:
但有些东西与其他东西并没有完全叠加......
printk 函数是如何调用的?我只能看到“callq 9”,而那个偏移量并没有告诉我任何东西..这是下一条指令..那又怎样?消息“Kello”被正确打印,但我找不到发生这种情况的代码!
此外..此代码如何访问 .rodata.str1.1 部分中的字符串“Kello etc..”?如果这是一个映射到 ds 寄存器的程序段,不应该像“ds:0”这样的东西来访问它吗?
我很困惑。。
c - 内核崩溃引起的 Linux 系统调用(奇怪的偏移)
我正在尝试从内核模块调用系统调用,我有以下代码:
此代码不起作用并且正在使系统崩溃(它是一个内核模块)。
带有重定位信息的那段代码的转储是:
我想知道..为什么 49: R_X86_64_PC32 path-0x4 中有 -0x4 偏移量?
我的意思是:mode 和 dev 应该自动解决而没有问题,但是路径呢?为什么 -0x4 偏移量?
我试图用
lea 0x0(%rip),%rdi // 这以某种方式添加了 -0x4 偏移量 add $0x4, %rdi ....
但代码仍然崩溃。
我哪里错了?
c - 内联汇编未知
“d0”和“d1”是干什么用的?您能否完整地解释所有代码?谢谢!
macos - 基本汇编程序上的“非法指令” - 甚至不是你好世界 - 为什么需要链接?
我只是想通了这一点,但与其将我的新问题(“为什么?”)分成另一个问题,我认为最好将这个问题的解决方案和解释保持在同一页面上。
我正在编写一个基本的汇编程序,使用内核中断启动并立即退出int 0x80
。我当前的代码如下:
组装在一起
执行后我得到一个单行错误:
Illegal instruction
这很奇怪,即使没有任何说明,即使将所有内容都注释掉仍然会导致结果。linking
尽管没有其他文件可以链接,但我是否错过了一步?我是
编辑:请允许我重新表述我的问题,当没有图书馆或任何要链接的东西时,为什么需要链接?
macos - 操作码的 AT&T 语法后缀是什么?
注意:我使用的是基于 BSD 的系统,所以如果我没记错的话,这意味着被调用的子例程/函数的 args 被推送到堆栈中,而不是放在寄存器中
我一直在尝试汇编,我想尝试我的简单内核退出程序:
在 64 位汇编中。
我记得读过一个很大的区别是寄存器现在被重命名为r
前缀而不是 32 位标准的e
前缀。
但是 64 位操作码的新后缀是什么,如果l
已经意味着 32 位长?
出于好奇,为什么它是r
新寄存器的前缀?
此外,如果有任何好的资源可以找到更多信息。或者教程,教程总是很有趣。
macos - Mac OS X 运行时错误上的 64 位程序集:“dyld: no writable segment”和“Trace/BPT trap”
尝试运行以下汇编程序时:
我收到以下错误:
知道是什么原因造成的吗?32 位汇编中的类似程序运行良好。
assembly - CPU 上推送和弹出操作数的必要性
为什么我们有 push 和 pop 之类的命令?
据我了解pop
,push
基本上与分别执行 ( mov
then add
) 和 ( sub
then mov
)esp
相同。
例如不会:
相当于:
如果堆栈访问不是(%esp-4)
,请纠正我,我还在学习组装
我能看到的唯一真正的好处是,如果同时进行这两项操作会提供一些优势;但是我不明白它怎么可能。