- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想展开一个 x64 调用堆栈,所以我尝试按照我在此处找到的“UNWIND 过程”进行操作:
http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
我知道如果 RIP 在 epilog 中,考虑到仍然需要完成的操作,我们需要计算 RSP 的偏移量,但我不清楚如何确定 RIP 是否在 epilog 中(在第 3.a 部分)?
有人可以向我解释一下吗? (链接或代码示例也将不胜感激)
最佳答案
To determine if the RIP is within an epilog, the code stream from RIP on is examined. If that code stream can be matched to the trailing portion of a legitimate epilog, as described in section CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFIAZQBmADQAOQA2ADAAOQAyADQAMgA1AAAA REF _Ref496092425 \r \h 0, then it is in an epilog, and the remaining portion of the epilog is simulated, with the context record updated as each instruction is processed
,并来自 Prolog and Epilog (我推荐整篇文章以便更好地理解)
These are the only legal forms for an epilog. It must consist of either an add RSP,constant or lea RSP,constant[FPReg], followed by a series of zero or more 8-byte register pops and a return or a jmp. (Only a subset of jmp statements are allowable in the epilog. [...]). No other code can appear. In particular, nothing can be scheduled within an epilog, including loading of a return value.
Note that, when a frame pointer is not used, the epilog must use add RSP,constant to deallocate the fixed part of the stack. It may not use lea RSP,constant[RSP] instead. This restriction exists so the unwind code has fewer patterns to recognize when searching for epilogs.
似乎如果代码发现自己处于这种情况下,它只会检查当前执行的代码以查找那些特定指令,如果匹配,则认为自己在 epilog 中。
关于c++ - x64 堆栈展开并检查 RIP 是否在 epilog 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042558/
我熟悉这种形式的内存引用: 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
我是一名优秀的程序员,十分优秀!