- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Reading program counter directly
(7 个回答)
4年前关闭。
#include <stdint.h>
uint64_t rip;
int main()
{
asm(
"movq %%rip, %0\n" : "=m" (rip)
);
sleep(10);
}
cc -m64 rip.c -o rip
/tmp/ccwNbZi1.s: Assembler messages:
/tmp/ccwNbZi1.s:12: Error: suffix or operands invalid for `movq'
make: *** [rip] Error 1
最佳答案
你看不懂(E|R)IP
因为没有 x86(/64) 指令可以直接读取它。
“阅读”它的唯一方法是使用 CALL
调用电话。操作说明。它会将返回地址保存在堆栈中,并且您可以读取该地址。
更新 :在 64 位模式下,您可以利用 RIP
-相对寻址,所以LEA RAX, [RIP]
会在 RAX
中给你它自己的地址.另一个解决方法是 MOV RAX, $
在 assembly 中。
关于assembly - 为什么我不能保存 rip 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397451/
我熟悉这种形式的内存引用: XXX ptr [base + index * size + displacement] 其中XXX是某个大小(字节/字/双字/等),base和index都是寄存器,siz
问题是我不能强制 gnu as 将 jmp 解释为 short 或 near,它不断解释它作为 far。 例如,下面的代码会导致segfault: int main() { asm volatil
问题是我不能强制 gnu as 将 jmp 解释为 short 或 near,它不断解释它作为 far。 例如,下面的代码会导致segfault: int main() { asm volatil
考虑以下 x64 Intel 程序集中的变量引用,其中变量 a在 .data 中声明部分: mov eax, dword ptr [rip + _a] 我很难理解这个变量引用是如何工作的。自 a是变量
Call triggers vulnerability in function children() 389: ⇑ $this->children ($relativePath) 384: $rela
这个问题在这里已经有了答案: Reading program counter directly (7 个回答) 4年前关闭。 #include uint64_t rip; int main() {
我正在尝试修改 rip 寄存器(只是为了好玩)。 buffer 应该是内存地址,所以不知道为什么会得到Error: operand type mismatch for 'movq' #include
对于我们的一个应用程序,我们在/var/log/messages 中看到了以下提到的几条消息: Sep 18 03:24:23 kernel: application_name[14682] tra
当我的 linux 应用程序崩溃时,它会在日志中生成如下一行: 段错误在 0000000 rip 00003f32a823 rsp 000123ade323 错误 4 那些 rip 和 rsp 地址是
我正在尝试实现最小内核,并且正在尝试实现克隆系统调用。在手册页中,您可以看到克隆系统调用定义如下: int clone(int (*fn)(void *), void *stack, int flag
对于计算机体系结构和处理器/内存级别发生的低级内容,我完全是新手。我首先要说的是。我对计算机所做的工作几乎一直处于高级编程水平。 C++、Java等话虽这么说,我目前正在读一本开始深入研究低级编程内容
我正在尝试在 Linux x86_64 上获取 sys_call_table 的偏移量。 首先,我通过从 MSR_LSTAR 读取指向 system_call 条目的指针,它是正确的 static u
rax是否获得偏移量加上该指令或下一条指令的地址?从微代码的角度来看,如果答案是下一条指令,则可能会更容易。 最佳答案 下一个。这是x86的一般规则(另请参见分支)。 在英特尔手册第2卷中的2.2.1
我有一个适用于 Mac OS X 的程序集 hello world 程序,如下所示: global _main section .text _main: mov rax, 0x2000004
这个问题已经有答案了: Why is the address of static variables relative to the Instruction Pointer? (1 个回答) Why
来自 Rubymonk ascent 教程“Ripping the Guts”,这段代码有什么区别:(我的) # compute([[4, 8], [15, 16]]) def compute(ary
基本上,我使用 ptrace 将 shell 代码注入(inject)远程进程以供执行。但是我发现了一些关于 RIP 寄存器的奇怪行为。 我所做的是将我的 shell 代码复制到程序映射的起始地址。然
我有一段简单的汇编代码,可以在 Mac OS X (x86-64) 上正常工作,但在 Linux (x86-64) 上不能正常工作: .data .align 4 foo: .quad 1,2 .te
我正在尝试读取内存中相对于 X86_64 上的 %rip 的值。在我的第一个例子中,我只想阅读 如果我用 C 语言编写以下代码,我可以调用它并获得正确的结果 (\x....C3C9): void *
我想展开一个 x64 调用堆栈,所以我尝试按照我在此处找到的“UNWIND 过程”进行操作: http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
我是一名优秀的程序员,十分优秀!