質問するログイン新規登録

回答編集履歴

1

VC++ x86 のコンパイル結果を追加

2020/06/22 01:23

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -58,4 +58,61 @@
58
58
  また、
59
59
  testB[0] は testB[0][0] のアドレスに変換されますが、
60
60
  testB[1] は testB[1][0] のアドレスに、そして、
61
- testB[2] は testB[2][0] のアドレスに変換されます。
61
+ testB[2] は testB[2][0] のアドレスに変換されます。
62
+
63
+ **追記**
64
+ Visual C++ の 32ビット版で -FAオプションでコンパイルすると、
65
+ ```
66
+ _DATA SEGMENT
67
+ COMM _testA:DWORD:05H
68
+ COMM _testB:DWORD:06H
69
+ _DATA ENDS
70
+ PUBLIC _main
71
+ EXTRN _f:PROC
72
+ EXTRN _g:PROC
73
+ EXTRN @__security_check_cookie@4:PROC
74
+ EXTRN ___security_cookie:DWORD
75
+ ; Function compile flags: /Odtp
76
+ _TEXT SEGMENT
77
+ _b$ = -48 ; size = 24
78
+ _a$ = -24 ; size = 20
79
+ __$ArrayPad$ = -4 ; size = 4
80
+ _main PROC
81
+ ; File c:\tmp\c\a.c
82
+ ; Line 10
83
+ push ebp
84
+ mov ebp, esp
85
+ sub esp, 48 ; 00000030H
86
+ mov eax, DWORD PTR ___security_cookie
87
+ xor eax, ebp
88
+ mov DWORD PTR __$ArrayPad$[ebp], eax
89
+ ; Line 13
90
+ push OFFSET _testA
91
+ call _f
92
+ add esp, 4
93
+ ; Line 14
94
+ push OFFSET _testB
95
+ call _g
96
+ add esp, 4
97
+ ; Line 15
98
+ lea eax, DWORD PTR _a$[ebp]
99
+ push eax
100
+ call _f
101
+ add esp, 4
102
+ ; Line 16
103
+ lea ecx, DWORD PTR _b$[ebp]
104
+ push ecx
105
+ call _g
106
+ add esp, 4
107
+ ; Line 17
108
+ xor eax, eax
109
+ mov ecx, DWORD PTR __$ArrayPad$[ebp]
110
+ xor ecx, ebp
111
+ call @__security_check_cookie@4
112
+ mov esp, ebp
113
+ pop ebp
114
+ ret 0
115
+ _main ENDP
116
+ _TEXT ENDS
117
+ END
118
+ ```