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 次 |
最近记录: |