NPE*_*NPE 26
我相信你可以简单地使用64位代码lea rax, [rip].
32位成语是:
call next
next: pop eax
Run Code Online (Sandbox Code Playgroud)
Bas*_*tch 10
如果使用GCC,您也可以使用 __builtin_return_address
偏移到当前段寄存器(EIP)通常不可访问.然而,间接读取它有一种hackish方式 - 你欺骗程序将EIP的值推入堆栈,然后只是读取它.您可以创建一个如下所示的子例程:
GetAddress:
mov eax, [esp]
ret
...
call GetAddress ; address of this line stored in eax
Run Code Online (Sandbox Code Playgroud)
或者,甚至更简单:
call NextLine
NextLine:
pop eax ; address of previous line stored in EAX
Run Code Online (Sandbox Code Playgroud)
如果使用CALL FAR指令,则段值(CS)也将被推入堆栈.
如果您使用的是C,那么您可以在此页面上使用各种特定于编译器的C扩展.另见这篇有趣的文章.
| 归档时间: |
|
| 查看次数: |
17692 次 |
| 最近记录: |