gpt4 book ai didi

assembly - 局部变量结构 FASM

转载 作者:行者123 更新时间:2023-12-03 10:02:44 28 4
gpt4 key购买 nike

所以我正在阅读有关如何创建结构的手册。

起初,我是这样做的:

struc point X, Y
{
.X dw X
.Y dw Y
}



section '.code' code readable executable
main:
push ebp
mov ebp,esp

PP Point 0, 0 ;Crashes here..

mov esp, ebp
pop ebp
mov eax, 0x0
ret

所以我认为很好,因为它是一个局部变量,我需要 sub esp, sizeof(Point)我做到了,但它仍然崩溃了..

所以我在 Point 结构中做了它,而不是崩溃,它现在被删除了:
section '.data' data readable writeable
Response db 13, 10, "Value: %d", 13, 10, 0

struc Point X, Y
{
sub esp, 0x8
mov dword[esp + 0x00], X
mov dword[esp + 0x04], Y
}



section '.code' code readable executable
main:
push ebp
mov ebp,esp

PP Point 0, 0 ;create a point
push PP
call Point_Valid
add esp, 0x04



mov esp, ebp
pop ebx

call [getchar]

mov eax, 0x00
ret


Point_Valid:
push ebp
mov ebp, esp

mov eax, [ebp + 0x8]
push eax ;Not sure how to get Point from eax or Point.X..
push Response
call [printf]
add esp, 0x08


mov esp, ebp
pop ebp
ret

但是,上述不仅失败,还会触发:

enter image description here
来自 Windows 8.1 的 Malware Defender

我不明白为什么 :S 但它只在我使用 sub esp 时发生结构内。如果我使用 .X dw X它只是崩溃,但不会触发恶意软件防御程序。

任何想法如何实现将点传递给函数?或者创建一个本地点并将其传递给一个函数以及访问它的字段?

最佳答案

在第一个示例中,您拼错了 pointPoint ,所以它没有组装(除非你告诉汇编程序忽略大小写)。

如果我们忽略这一点,你在这里做什么:

main:
push ebp
mov ebp,esp

PP point 0, 0 ;Crashes here..

mov esp, ebp
pop ebp
mov eax, 0x0

几乎和你写的一样:
main:
push ebp
mov ebp,esp

dw 0,0

mov esp, ebp
pop ebp
mov eax, 0x0

它只是将这两个 0 字插入到您放置它们的指令“流”中。如果你组装这个然后反汇编你得到的输出:
00000000  6655              push ebp
00000002 6689E5 mov ebp,esp
00000005 0000 add [bx+si],al ; <- the first 0
00000007 0000 add [bx+si],al ; <- the second 0
00000009 6689EC mov esp,ebp
0000000C 665D pop ebp
0000000E 66B800000000 mov eax,0x0
00000014 C3 ret

您的 pp变量必须在其他地方声明,以便它永远不会出现在代码路径中(即 eip / rip 不应该到达您的变量)。

如果你真的需要一个堆栈分配 point你可以用 virtual at :
virtual at esp-0x10  ; use whatever address is appropriate in your case
pp point 1,2
end virtual

mov ax,[pp.X]

请注意,这既不会为 point 分配空间也不会初始化;它只是设置名称-地址映射。

关于assembly - 局部变量结构 FASM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com