- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 asm 代码:
; int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
_wWinMain@16 proc near
var_8= dword ptr -8
var_4= dword ptr -4
hInstance= dword ptr 8
hPrevInstance= dword ptr 0Ch
lpCmdLine= dword ptr 10h
nShowCmd= dword ptr 14h
push ebp
mov ebp, esp
sub esp, 8
mov [ebp+var_4], 5
mov eax, [ebp+var_4]
add eax, 1
mov [ebp+var_8], eax
xor eax, eax
mov esp, ebp
pop ebp
retn 10h
据我所知,返回指令有 3 种类型:ret、retn 和 retf,意思是返回、返回近和返回远。它们允许一个可选参数 nBytes,我猜它是从定义的变量中弹出的字节数。什么时候应该使用 retn 或 retf 而不是 ret?如何计算可选参数 nBytes?
最佳答案
实际上只有两种不同的返回,retn(近返回)和retf(远返回)。当你只使用 ret 时,汇编器或编译器足够聪明,可以选择哪一个是必需的。近返回是跳转到现有代码段内,远返回是跳转到不同的代码段。在 Windows 上,您只有一个代码段,因此 ret 应该只是 retn 的助记符。单独的 retn 和 retf 指令让人回想起过去分段内存模型很常见的时代。现在运行的几乎所有 32 位 x86 系统都使用扁平的、非分段的内存模型。
不带参数的 Ret 将返回地址从堆栈中弹出并跳转到该地址。一些调用约定(如 __stdcall)指定被调用函数清理堆栈。在这种情况下,他们使用字节数调用 ret 来将这些参数从堆栈中弹出。这16个字节是winmain函数的参数。
关于assembly - ret、retn、retf - 如何使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396909/
我了解到当我们使用retn时,ip会被弹出。当retf使用cs时,ip会被弹出。 我的问题是:一个过程不知道它是从哪里调用的(不知道使用的是 call near 还是 call far),所以当我们使
我有以下 asm 代码: ; int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
我正在研究一些反反汇编技术,并发现了以下代码片段: push 0x33 call $+5 add [esp+0x10+var_10], 5 retf ; next instruction here
我是一名优秀的程序员,十分优秀!