それで構造物の作り方のマニュアルを読んでいました..
最初に、私はしました:
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
ただし、上記が失敗するだけでなく、これもトリガーされます。
Malware Defender for Windows 8.1 内から
理由がわかりません:Sしかしsub esp
、構造体内で使用した場合にのみ発生します。を使用する.X dw X
と、クラッシュするだけで、マルウェア ディフェンダーはトリガーされません。
ポイントを関数に渡す方法を教えてください。または、ローカル ポイントを作成して関数に渡し、そのフィールドにアクセスしますか?