|
发表于 2023-7-13 14:53:49
|
显示全部楼层
回帖奖励 +1 鱼币
问题1:argc = dword ptr 4, argv = dword ptr 8, envp = dword ptr 0c 是指示这些变量在栈中的位置。具体来说,dword ptr 是数据类型说明符,表示这些变量是32位的双字(即4字节)指针。
问题2:[esp+10h+argv] 表示在栈指针 esp 的基础上,偏移 10h(16字节)加上 argv 的值,得到一个内存地址。然后将该地址存储在寄存器 ecx 中。[ecx+4] 表示取 ecx 寄存器中的值,加上偏移 4 得到的地址上存储的数据,即 argv 数组的第一个元素。
在这个上下文中,ecx 确实保存了一个地址,它是由 [esp+10h+argv] 计算得出的。通过将这个地址存储在 ecx 中,然后使用 [ecx+4] 可以访问 argv 数组的第一个元素。
问题3:or [edx],bl 表示将寄存器 edx 指定的内存地址上的值与寄存器 bl 的值进行按位或运算,并将结果存储回 edx 指定的内存地址。在这种情况下,edx 存储的是 argv[1] 的地址,bl 存储的是 argc-1 的值。
因此,这条指令实际上是将 argv[1][0](即 argv[1] 数组的第一个元素)与 argc-1 进行按位或运算,并将结果存储回 argv[1][0] 的地址中。这可能是在某种特定的上下文中进行的逻辑操作。
希望能够解答你的问题!如果还有其他问题,请随时提问。 |
|