質問編集履歴

6

2021/12/17 09:59

投稿

qqfsdfsafd
qqfsdfsafd

スコア599

test CHANGED
File without changes
test CHANGED
@@ -315,3 +315,11 @@
315
315
 
316
316
 
317
317
  時間を使っているため、タイミングによっては1秒ずれることがありますが、それは無関係です。
318
+
319
+
320
+
321
+ 返信
322
+
323
+ 間違った使い方とは?
324
+
325
+ どの辺が間違いですか?

5

補足追記

2021/12/17 09:59

投稿

qqfsdfsafd
qqfsdfsafd

スコア599

test CHANGED
File without changes
test CHANGED
@@ -311,3 +311,7 @@
311
311
  戻り値がデバッグ版とリリース版で4違います。
312
312
 
313
313
  (リリース版の戻り値に+=4してやるとデバッグ版と同じになります。リリース版にprintfを入れてもデバッグ版と同じ戻り値になります。意味がわかりません。)
314
+
315
+
316
+
317
+ 時間を使っているため、タイミングによっては1秒ずれることがありますが、それは無関係です。

4

課題を追記しました。

2021/12/17 09:10

投稿

qqfsdfsafd
qqfsdfsafd

スコア599

test CHANGED
File without changes
test CHANGED
@@ -310,4 +310,4 @@
310
310
 
311
311
  戻り値がデバッグ版とリリース版で4違います。
312
312
 
313
- (リリース版の戻り値に+=4してやるとデバッグ版と同じになります。意味がわかりません。)
313
+ (リリース版の戻り値に+=4してやるとデバッグ版と同じになります。リリース版にprintfを入れてもデバッグ版と同じ戻り値になります。意味がわかりません。)

3

補足追記

2021/12/17 09:06

投稿

qqfsdfsafd
qqfsdfsafd

スコア599

test CHANGED
File without changes
test CHANGED
@@ -303,3 +303,11 @@
303
303
  }
304
304
 
305
305
  ```
306
+
307
+
308
+
309
+ 追記
310
+
311
+ 戻り値がデバッグ版とリリース版で4違います。
312
+
313
+ (リリース版の戻り値に+=4してやるとデバッグ版と同じになります。意味がわかりません。)

2

ソースコードを追加しました。

2021/12/17 09:04

投稿

qqfsdfsafd
qqfsdfsafd

スコア599

test CHANGED
File without changes
test CHANGED
@@ -21,3 +21,285 @@
21
21
 
22
22
 
23
23
  他にどんなことが考えられますか?
24
+
25
+
26
+
27
+ 【追記】
28
+
29
+ ソースコードです。
30
+
31
+ 用途は戻り値の難読化です。
32
+
33
+ デバッグ版とリリース版で戻り値が違います。
34
+
35
+ それだけではなく、↓こちらのprintfを入れるとまた戻り値が変わります。
36
+
37
+ //printf("%lld\n", u64.time64);
38
+
39
+ 意味がわかりません。
40
+
41
+
42
+
43
+ ```C++
44
+
45
+ typedef union {
46
+
47
+ __time64_t time64;
48
+
49
+ char char8[8];
50
+
51
+ struct {
52
+
53
+ unsigned bit0 : 1;
54
+
55
+ unsigned bit1 : 1;
56
+
57
+ unsigned bit2 : 1;
58
+
59
+ unsigned bit3 : 1;
60
+
61
+ unsigned bit4 : 1;
62
+
63
+ unsigned bit5 : 1;
64
+
65
+ unsigned bit6 : 1;
66
+
67
+ unsigned bit7 : 1;
68
+
69
+ unsigned bit8 : 1;
70
+
71
+ unsigned bit9 : 1;
72
+
73
+ unsigned bit10 : 1;
74
+
75
+ unsigned bit11 : 1;
76
+
77
+ unsigned bit12 : 1;
78
+
79
+ unsigned bit13 : 1;
80
+
81
+ unsigned bit14 : 1;
82
+
83
+ unsigned bit15 : 1;
84
+
85
+ unsigned bit16 : 1;
86
+
87
+ unsigned bit17 : 1;
88
+
89
+ unsigned bit18 : 1;
90
+
91
+ unsigned bit19 : 1;
92
+
93
+ unsigned bit20 : 1;
94
+
95
+ unsigned bit21 : 1;
96
+
97
+ unsigned bit22 : 1;
98
+
99
+ unsigned bit23 : 1;
100
+
101
+ unsigned bit24 : 1;
102
+
103
+ unsigned bit25 : 1;
104
+
105
+ unsigned bit26 : 1;
106
+
107
+ unsigned bit27 : 1;
108
+
109
+ unsigned bit28 : 1;
110
+
111
+ unsigned bit29 : 1;
112
+
113
+ unsigned bit30 : 1;
114
+
115
+ unsigned bit31 : 1;
116
+
117
+ unsigned int bit32 : 32;
118
+
119
+ } bit64;
120
+
121
+ } Union64;
122
+
123
+
124
+
125
+ typedef union {
126
+
127
+ int test;
128
+
129
+ struct {
130
+
131
+ unsigned bit19 : 1;
132
+
133
+ unsigned bit30 : 1;
134
+
135
+ unsigned bit9 : 1;
136
+
137
+ unsigned bit29 : 1;
138
+
139
+ unsigned bit20 : 1;
140
+
141
+ unsigned bit17 : 1;
142
+
143
+ unsigned bit22 : 1;
144
+
145
+ unsigned bit8 : 1;
146
+
147
+ unsigned bit13 : 1;
148
+
149
+ unsigned bit4 : 1;
150
+
151
+ unsigned bit31 : 1;
152
+
153
+ unsigned bit24 : 1;
154
+
155
+ unsigned bit25 : 1;
156
+
157
+ unsigned bit16 : 1;
158
+
159
+ unsigned bit2 : 1;
160
+
161
+ unsigned bit0 : 1;
162
+
163
+ unsigned bit21 : 1;
164
+
165
+ unsigned bit14 : 1;
166
+
167
+ unsigned bit28 : 1;
168
+
169
+ unsigned bit15 : 1;
170
+
171
+ unsigned bit1 : 1;
172
+
173
+ unsigned bit10 : 1;
174
+
175
+ unsigned bit26 : 1;
176
+
177
+ unsigned bit18 : 1;
178
+
179
+ unsigned bit5 : 1;
180
+
181
+ unsigned bit23 : 1;
182
+
183
+ unsigned bit12 : 1;
184
+
185
+ unsigned bit7 : 1;
186
+
187
+ unsigned bit3 : 1;
188
+
189
+ unsigned bit27 : 1;
190
+
191
+ unsigned bit11 : 1;
192
+
193
+ unsigned bit6 : 1;
194
+
195
+ } bit32;
196
+
197
+ } Union32;
198
+
199
+
200
+
201
+ static Union64 u64, u64_Now;
202
+
203
+ static Union32 u32;
204
+
205
+
206
+
207
+ int Test(const char* pTest)
208
+
209
+ {
210
+
211
+ struct tm tNow;
212
+
213
+ time_t now;
214
+
215
+
216
+
217
+ time(&now);
218
+
219
+ _gmtime64_s(&tNow, &now);
220
+
221
+ u64.time64 = u64_Now.time64 = _mkgmtime64(&tNow);
222
+
223
+ //printf("%lld\n", u64.time64);
224
+
225
+
226
+
227
+ for (int i = 0; i < 8; i++) {
228
+
229
+ u64.char8[i] ^= *(pTest + i);
230
+
231
+ }
232
+
233
+
234
+
235
+ u32.bit32.bit0 = u64.bit64.bit0;
236
+
237
+ u32.bit32.bit1 = u64.bit64.bit1;
238
+
239
+ u32.bit32.bit2 = u64.bit64.bit2;
240
+
241
+ u32.bit32.bit3 = u64.bit64.bit3;
242
+
243
+ u32.bit32.bit4 = u64.bit64.bit4;
244
+
245
+ u32.bit32.bit5 = u64.bit64.bit5;
246
+
247
+ u32.bit32.bit6 = u64.bit64.bit6;
248
+
249
+ u32.bit32.bit7 = u64.bit64.bit7;
250
+
251
+ u32.bit32.bit8 = u64.bit64.bit8;
252
+
253
+ u32.bit32.bit8 = u64.bit64.bit9;
254
+
255
+ u32.bit32.bit10 = u64.bit64.bit10;
256
+
257
+ u32.bit32.bit11 = u64.bit64.bit11;
258
+
259
+ u32.bit32.bit12 = u64.bit64.bit12;
260
+
261
+ u32.bit32.bit13 = u64.bit64.bit13;
262
+
263
+ u32.bit32.bit14 = u64.bit64.bit14;
264
+
265
+ u32.bit32.bit15 = u64.bit64.bit15;
266
+
267
+ u32.bit32.bit16 = u64.bit64.bit16;
268
+
269
+ u32.bit32.bit17 = u64.bit64.bit17;
270
+
271
+ u32.bit32.bit18 = u64.bit64.bit18;
272
+
273
+ u32.bit32.bit19 = u64.bit64.bit19;
274
+
275
+ u32.bit32.bit20 = u64.bit64.bit20;
276
+
277
+ u32.bit32.bit21 = u64.bit64.bit21;
278
+
279
+ u32.bit32.bit22 = u64.bit64.bit22;
280
+
281
+ u32.bit32.bit23 = u64.bit64.bit23;
282
+
283
+ u32.bit32.bit24 = u64.bit64.bit24;
284
+
285
+ u32.bit32.bit25 = u64.bit64.bit25;
286
+
287
+ u32.bit32.bit26 = u64.bit64.bit26;
288
+
289
+ u32.bit32.bit27 = u64.bit64.bit27;
290
+
291
+ u32.bit32.bit28 = u64.bit64.bit28;
292
+
293
+ u32.bit32.bit29 = u64.bit64.bit29;
294
+
295
+ u32.bit32.bit30 = u64.bit64.bit30;
296
+
297
+ u32.bit32.bit31 = u64.bit64.bit31;
298
+
299
+
300
+
301
+ return u32.test;
302
+
303
+ }
304
+
305
+ ```

1

2021/12/17 08:10

投稿

qqfsdfsafd
qqfsdfsafd

スコア599

test CHANGED
File without changes
test CHANGED
@@ -11,3 +11,13 @@
11
11
 
12
12
 
13
13
  初期化はしていませんが、使う前に値を代入しているので関係ないと思っています。
14
+
15
+
16
+
17
+ 補足
18
+
19
+ 今までの経験上、初期値が同じ、計算式も同じでデバッグ版とリリース版で演算結果が異なるなどということは未経験で、変数の初期化をしない場合、デバッグ版はオール0が入りリリース版はデタラメな値で初期化されたということはありました。
20
+
21
+
22
+
23
+ 他にどんなことが考えられますか?