質問編集履歴

1

コードの修正とアセンブリの結果の追記

2018/12/04 16:23

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -137,3 +137,133 @@
137
137
  InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
138
138
 
139
139
  ```
140
+
141
+
142
+
143
+ ### 追記
144
+
145
+ コードをシンプルなものに変えて実行しました.
146
+
147
+ ```C
148
+
149
+ #include <stdio.h>
150
+
151
+
152
+
153
+ void __cdecl some_func(
154
+
155
+ int a, int b, int c, int d, int e, int f, int g, int h, int i, int j
156
+
157
+ ) {} // do nothing
158
+
159
+
160
+
161
+ int main() {
162
+
163
+ some_func(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
164
+
165
+ return 0;
166
+
167
+ }
168
+
169
+ ```
170
+
171
+ アセンブリは以下のようになりました.(一部略)
172
+
173
+ ``` sample.s
174
+
175
+ _some_func:
176
+
177
+ .
178
+
179
+ .
180
+
181
+ .
182
+
183
+ movl 40(%rbp), %eax
184
+
185
+ movl 32(%rbp), %r10d
186
+
187
+ movl 24(%rbp), %r11d
188
+
189
+ movl 16(%rbp), %ebx
190
+
191
+ movl %edi, -12(%rbp)
192
+
193
+ movl %esi, -16(%rbp)
194
+
195
+ movl %edx, -20(%rbp)
196
+
197
+ movl %ecx, -24(%rbp)
198
+
199
+ movl %r8d, -28(%rbp)
200
+
201
+ movl %r9d, -32(%rbp)
202
+
203
+ movl %ebx, -36(%rbp) ## 4-byte Spill
204
+
205
+ movl %r10d, -40(%rbp) ## 4-byte Spill
206
+
207
+ movl %r11d, -44(%rbp) ## 4-byte Spill
208
+
209
+ movl %eax, -48(%rbp) ## 4-byte Spill
210
+
211
+ .
212
+
213
+ .
214
+
215
+ .
216
+
217
+ _main:
218
+
219
+ .
220
+
221
+ .
222
+
223
+ .
224
+
225
+ movl $1, %edi
226
+
227
+ movl $2, %esi
228
+
229
+ movl $3, %edx
230
+
231
+ movl $4, %ecx
232
+
233
+ movl $5, %r8d
234
+
235
+ movl $6, %r9d
236
+
237
+ movl $7, %eax
238
+
239
+ movl $8, %r10d
240
+
241
+ movl $9, %r11d
242
+
243
+ movl $10, %ebx
244
+
245
+ movl $0, -12(%rbp)
246
+
247
+ movl $7, (%rsp)
248
+
249
+ movl $8, 8(%rsp)
250
+
251
+ movl $9, 16(%rsp)
252
+
253
+ movl $10, 24(%rsp)
254
+
255
+ movl %ebx, -16(%rbp) ## 4-byte Spill
256
+
257
+ movl %r11d, -20(%rbp) ## 4-byte Spill
258
+
259
+ movl %r10d, -24(%rbp) ## 4-byte Spill
260
+
261
+ movl %eax, -28(%rbp) ## 4-byte Spill
262
+
263
+ callq _some_func
264
+
265
+ ```
266
+
267
+ アセンブラについて詳しくないのですが,確かにすぐにスタックにしまっているわけではないみたいです.
268
+
269
+ これは結局最後の4つだけ右からスタックにしまっているということで大丈夫ですか?