nmarshall commited on
Commit
92800b5
·
1 Parent(s): 9b92b16

qvm: history producer callers

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -652,3 +652,6 @@ Research progress: RE-656 [report](research/QVM_MODEL_TRANSFORMS.md); remaining
652
 
653
 
654
  Research progress: RE-657 [report](research/QVM_ENTITY_QUERY.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
652
 
653
 
654
  Research progress: RE-657 [report](research/QVM_ENTITY_QUERY.md); remaining native/content/runtime/platform scope stays open.
655
+
656
+
657
+ Research progress: RE-659 [report](research/QVM_HISTORY_CALLERS.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -998,3 +998,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
998
 
999
 
1000
  **RE-657 — Complete entity tag query and continuation:** 276433 scans880-byte entity records using nonzero532/536 and exact integer540 tag equality; continuation starts after the prior record. [Evidence](research/QVM_ENTITY_QUERY.md).
 
 
 
 
998
 
999
 
1000
  **RE-657 — Complete entity tag query and continuation:** 276433 scans880-byte entity records using nonzero532/536 and exact integer540 tag equality; continuation starts after the prior record. [Evidence](research/QVM_ENTITY_QUERY.md).
1001
+
1002
+
1003
+ **RE-659 — History producer caller and literal-reference inventory:** One direct append caller156173 and three direct reset callers174399/203011/219630 are present; no aligned initialized-data matches were found. [Evidence](research/QVM_HISTORY_CALLERS.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -975,3 +975,6 @@ Research progress: RE-657 [report](research/QVM_ENTITY_QUERY.md); remaining nati
975
 
976
 
977
  RE-648–657 batch complete: [history production and model-hit preparation](research/QVM_HISTORY_HIT_BATCH.md). RE-658 tracks the next bounded research work; original/native parity and full Rust/Bevy/Solari gameplay remain open.
 
 
 
 
975
 
976
 
977
  RE-648–657 batch complete: [history production and model-hit preparation](research/QVM_HISTORY_HIT_BATCH.md). RE-658 tracks the next bounded research work; original/native parity and full Rust/Bevy/Solari gameplay remain open.
978
+
979
+
980
+ Research progress: RE-659 [report](research/QVM_HISTORY_CALLERS.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -952,3 +952,8 @@ Complete279820 updates attacker/victim hit/location/value counters;33715 enables
952
  ## 2026-10-20 — RE-657 Complete entity tag query and continuation (separate task commit)
953
 
954
  276433 scans880-byte entity records using nonzero532/536 and exact integer540 tag equality; continuation starts after the prior record. 60 first-match fixtures and15 repeated scans check all results, exclusion of previous pointers, distinct nonnull names, exhausted pools and unchanged records; unsigned LTU has independent high-bit/equality checks. Full suite: 1097 tests pass. Report regenerates byte-identically (253272 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime changed; the bounded shared evaluator gains tested unsigned LTU support; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
952
  ## 2026-10-20 — RE-657 Complete entity tag query and continuation (separate task commit)
953
 
954
  276433 scans880-byte entity records using nonzero532/536 and exact integer540 tag equality; continuation starts after the prior record. 60 first-match fixtures and15 repeated scans check all results, exclusion of previous pointers, distinct nonnull names, exhausted pools and unchanged records; unsigned LTU has independent high-bit/equality checks. Full suite: 1097 tests pass. Report regenerates byte-identically (253272 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime changed; the bounded shared evaluator gains tested unsigned LTU support; native/reference/legal/full platform scope remains open.
955
+
956
+
957
+ ## 2026-10-20 — RE-659 History producer caller and literal-reference inventory (separate task commit)
958
+
959
+ One direct append caller156173 and three direct reset callers174399/203011/219630 are present; no aligned initialized-data matches were found. Four checks compare exhaustive literal references, actual owner boundaries, copied instruction contexts and initialized-data results. Full suite: 1101 tests pass. Report regenerates byte-identically (26775 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1018,3 +1018,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1018
 
1019
 
1020
  - [ ] RE-658 Recover live history scheduling, complete pose/intersection/contact/damage and lifecycle composition; validate original/native reference behavior and connect a Rust gameplay slice. See the [next ten tasks](research/QVM_HISTORY_HIT_BATCH.md#next-ten-concrete-tasks).
 
 
 
 
1018
 
1019
 
1020
  - [ ] RE-658 Recover live history scheduling, complete pose/intersection/contact/damage and lifecycle composition; validate original/native reference behavior and connect a Rust gameplay slice. See the [next ten tasks](research/QVM_HISTORY_HIT_BATCH.md#next-ten-concrete-tasks).
1021
+
1022
+
1023
+ - [x] RE-659 History producer caller and literal-reference inventory ([report](research/QVM_HISTORY_CALLERS.md)).
docs/research/QVM_HISTORY_CALLERS.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # History producer caller and literal-reference inventory
2
+
3
+ RE-659. Reproduce with `python3 scripts/analyze_qvm_history_callers.py`; check with `python3 scripts/test_qvm_history_callers.py`. The [machine report](qvm-history-callers.json) retains source identity and bounded fixtures.
4
+
5
+ An exhaustive decoded CONST scan finds append142773 at156402 inside156173, and reset142502 at174728/203222/220009 inside174399/203011/219630. Every reference is immediately followed by CALL. The report preserves28 preceding instructions and continuation context for caller argument/guard investigation. No aligned initialized-data word equals either producer entry. This is a complete literal-reference inventory, not proof of dynamic frame scheduling, reset semantics or absence of computed indirect calls. These four source owners bound the next scheduling investigation; do not replace their conditions with assumed connect/respawn/frame labels.
6
+
7
+ No original executable/full QVM/native collision/physics/rendering executes. Native responses and legal input domains are supplied or unverified where stated; full runtime/macOS/Linux Rust/Bevy/Solari gameplay remains open.
docs/research/README.md CHANGED
@@ -576,3 +576,6 @@ The extension collector adds five focused tests for native tail calls, command-r
576
 
577
 
578
  [RE-648–657: History production and model-hit preparation](QVM_HISTORY_HIT_BATCH.md), with validation limits and the next ten concrete tasks.
 
 
 
 
576
 
577
 
578
  [RE-648–657: History production and model-hit preparation](QVM_HISTORY_HIT_BATCH.md), with validation limits and the next ten concrete tasks.
579
+
580
+
581
+ [RE-659: History producer caller and literal-reference inventory](QVM_HISTORY_CALLERS.md). Reproduce with `python3 scripts/analyze_qvm_history_callers.py`; check with `python3 scripts/test_qvm_history_callers.py`.
docs/research/qvm-history-callers.json ADDED
@@ -0,0 +1,1110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "aligned_data_matches": [],
3
+ "limits": "Complete decoded CONST inventory and aligned initialized-data matches only. Direct literal CALLs are identified; data matches are candidates, not proven function pointers. Context records do not establish dynamic scheduling, reachability or indirect dispatch.",
4
+ "references": [
5
+ {
6
+ "context": [
7
+ {
8
+ "code_offset": 461907,
9
+ "file_offset": 461939,
10
+ "index": 156374,
11
+ "opcode": "LOAD4",
12
+ "operand": null
13
+ },
14
+ {
15
+ "code_offset": 461908,
16
+ "file_offset": 461940,
17
+ "index": 156375,
18
+ "opcode": "ARG",
19
+ "operand": 8
20
+ },
21
+ {
22
+ "code_offset": 461910,
23
+ "file_offset": 461942,
24
+ "index": 156376,
25
+ "opcode": "LOCAL",
26
+ "operand": 36
27
+ },
28
+ {
29
+ "code_offset": 461915,
30
+ "file_offset": 461947,
31
+ "index": 156377,
32
+ "opcode": "LOAD4",
33
+ "operand": null
34
+ },
35
+ {
36
+ "code_offset": 461916,
37
+ "file_offset": 461948,
38
+ "index": 156378,
39
+ "opcode": "ARG",
40
+ "operand": 12
41
+ },
42
+ {
43
+ "code_offset": 461918,
44
+ "file_offset": 461950,
45
+ "index": 156379,
46
+ "opcode": "CONST",
47
+ "operand": 1
48
+ },
49
+ {
50
+ "code_offset": 461923,
51
+ "file_offset": 461955,
52
+ "index": 156380,
53
+ "opcode": "ARG",
54
+ "operand": 16
55
+ },
56
+ {
57
+ "code_offset": 461925,
58
+ "file_offset": 461957,
59
+ "index": 156381,
60
+ "opcode": "CONST",
61
+ "operand": 30550
62
+ },
63
+ {
64
+ "code_offset": 461930,
65
+ "file_offset": 461962,
66
+ "index": 156382,
67
+ "opcode": "CALL",
68
+ "operand": null
69
+ },
70
+ {
71
+ "code_offset": 461931,
72
+ "file_offset": 461963,
73
+ "index": 156383,
74
+ "opcode": "POP",
75
+ "operand": null
76
+ },
77
+ {
78
+ "code_offset": 461932,
79
+ "file_offset": 461964,
80
+ "index": 156384,
81
+ "opcode": "LOCAL",
82
+ "operand": 48
83
+ },
84
+ {
85
+ "code_offset": 461937,
86
+ "file_offset": 461969,
87
+ "index": 156385,
88
+ "opcode": "LOAD4",
89
+ "operand": null
90
+ },
91
+ {
92
+ "code_offset": 461938,
93
+ "file_offset": 461970,
94
+ "index": 156386,
95
+ "opcode": "CONST",
96
+ "operand": 520
97
+ },
98
+ {
99
+ "code_offset": 461943,
100
+ "file_offset": 461975,
101
+ "index": 156387,
102
+ "opcode": "ADD",
103
+ "operand": null
104
+ },
105
+ {
106
+ "code_offset": 461944,
107
+ "file_offset": 461976,
108
+ "index": 156388,
109
+ "opcode": "LOAD4",
110
+ "operand": null
111
+ },
112
+ {
113
+ "code_offset": 461945,
114
+ "file_offset": 461977,
115
+ "index": 156389,
116
+ "opcode": "ARG",
117
+ "operand": 8
118
+ },
119
+ {
120
+ "code_offset": 461947,
121
+ "file_offset": 461979,
122
+ "index": 156390,
123
+ "opcode": "CONST",
124
+ "operand": 152219
125
+ },
126
+ {
127
+ "code_offset": 461952,
128
+ "file_offset": 461984,
129
+ "index": 156391,
130
+ "opcode": "CALL",
131
+ "operand": null
132
+ },
133
+ {
134
+ "code_offset": 461953,
135
+ "file_offset": 461985,
136
+ "index": 156392,
137
+ "opcode": "POP",
138
+ "operand": null
139
+ },
140
+ {
141
+ "code_offset": 461954,
142
+ "file_offset": 461986,
143
+ "index": 156393,
144
+ "opcode": "LOCAL",
145
+ "operand": 48
146
+ },
147
+ {
148
+ "code_offset": 461959,
149
+ "file_offset": 461991,
150
+ "index": 156394,
151
+ "opcode": "LOAD4",
152
+ "operand": null
153
+ },
154
+ {
155
+ "code_offset": 461960,
156
+ "file_offset": 461992,
157
+ "index": 156395,
158
+ "opcode": "ARG",
159
+ "operand": 8
160
+ },
161
+ {
162
+ "code_offset": 461962,
163
+ "file_offset": 461994,
164
+ "index": 156396,
165
+ "opcode": "CONST",
166
+ "operand": 156413
167
+ },
168
+ {
169
+ "code_offset": 461967,
170
+ "file_offset": 461999,
171
+ "index": 156397,
172
+ "opcode": "CALL",
173
+ "operand": null
174
+ },
175
+ {
176
+ "code_offset": 461968,
177
+ "file_offset": 462000,
178
+ "index": 156398,
179
+ "opcode": "POP",
180
+ "operand": null
181
+ },
182
+ {
183
+ "code_offset": 461969,
184
+ "file_offset": 462001,
185
+ "index": 156399,
186
+ "opcode": "LOCAL",
187
+ "operand": 48
188
+ },
189
+ {
190
+ "code_offset": 461974,
191
+ "file_offset": 462006,
192
+ "index": 156400,
193
+ "opcode": "LOAD4",
194
+ "operand": null
195
+ },
196
+ {
197
+ "code_offset": 461975,
198
+ "file_offset": 462007,
199
+ "index": 156401,
200
+ "opcode": "ARG",
201
+ "operand": 8
202
+ },
203
+ {
204
+ "code_offset": 461977,
205
+ "file_offset": 462009,
206
+ "index": 156402,
207
+ "opcode": "CONST",
208
+ "operand": 142773
209
+ },
210
+ {
211
+ "code_offset": 461982,
212
+ "file_offset": 462014,
213
+ "index": 156403,
214
+ "opcode": "CALL",
215
+ "operand": null
216
+ },
217
+ {
218
+ "code_offset": 461983,
219
+ "file_offset": 462015,
220
+ "index": 156404,
221
+ "opcode": "POP",
222
+ "operand": null
223
+ },
224
+ {
225
+ "code_offset": 461984,
226
+ "file_offset": 462016,
227
+ "index": 156405,
228
+ "opcode": "LOCAL",
229
+ "operand": 48
230
+ },
231
+ {
232
+ "code_offset": 461989,
233
+ "file_offset": 462021,
234
+ "index": 156406,
235
+ "opcode": "LOAD4",
236
+ "operand": null
237
+ },
238
+ {
239
+ "code_offset": 461990,
240
+ "file_offset": 462022,
241
+ "index": 156407,
242
+ "opcode": "ARG",
243
+ "operand": 8
244
+ },
245
+ {
246
+ "code_offset": 461992,
247
+ "file_offset": 462024,
248
+ "index": 156408,
249
+ "opcode": "CONST",
250
+ "operand": 178161
251
+ },
252
+ {
253
+ "code_offset": 461997,
254
+ "file_offset": 462029,
255
+ "index": 156409,
256
+ "opcode": "CALL",
257
+ "operand": null
258
+ },
259
+ {
260
+ "code_offset": 461998,
261
+ "file_offset": 462030,
262
+ "index": 156410,
263
+ "opcode": "POP",
264
+ "operand": null
265
+ }
266
+ ],
267
+ "direct_call": true,
268
+ "instruction": 156402,
269
+ "owner": 156173,
270
+ "target": 142773
271
+ },
272
+ {
273
+ "context": [
274
+ {
275
+ "code_offset": 517374,
276
+ "file_offset": 517406,
277
+ "index": 174700,
278
+ "opcode": "LOAD4",
279
+ "operand": null
280
+ },
281
+ {
282
+ "code_offset": 517375,
283
+ "file_offset": 517407,
284
+ "index": 174701,
285
+ "opcode": "STORE4",
286
+ "operand": null
287
+ },
288
+ {
289
+ "code_offset": 517376,
290
+ "file_offset": 517408,
291
+ "index": 174702,
292
+ "opcode": "LOCAL",
293
+ "operand": 24
294
+ },
295
+ {
296
+ "code_offset": 517381,
297
+ "file_offset": 517413,
298
+ "index": 174703,
299
+ "opcode": "LOAD4",
300
+ "operand": null
301
+ },
302
+ {
303
+ "code_offset": 517382,
304
+ "file_offset": 517414,
305
+ "index": 174704,
306
+ "opcode": "ARG",
307
+ "operand": 8
308
+ },
309
+ {
310
+ "code_offset": 517384,
311
+ "file_offset": 517416,
312
+ "index": 174705,
313
+ "opcode": "CONST",
314
+ "operand": 0
315
+ },
316
+ {
317
+ "code_offset": 517389,
318
+ "file_offset": 517421,
319
+ "index": 174706,
320
+ "opcode": "ARG",
321
+ "operand": 12
322
+ },
323
+ {
324
+ "code_offset": 517391,
325
+ "file_offset": 517423,
326
+ "index": 174707,
327
+ "opcode": "CONST",
328
+ "operand": 468
329
+ },
330
+ {
331
+ "code_offset": 517396,
332
+ "file_offset": 517428,
333
+ "index": 174708,
334
+ "opcode": "ARG",
335
+ "operand": 16
336
+ },
337
+ {
338
+ "code_offset": 517398,
339
+ "file_offset": 517430,
340
+ "index": 174709,
341
+ "opcode": "CONST",
342
+ "operand": -101
343
+ },
344
+ {
345
+ "code_offset": 517403,
346
+ "file_offset": 517435,
347
+ "index": 174710,
348
+ "opcode": "CALL",
349
+ "operand": null
350
+ },
351
+ {
352
+ "code_offset": 517404,
353
+ "file_offset": 517436,
354
+ "index": 174711,
355
+ "opcode": "POP",
356
+ "operand": null
357
+ },
358
+ {
359
+ "code_offset": 517405,
360
+ "file_offset": 517437,
361
+ "index": 174712,
362
+ "opcode": "LOCAL",
363
+ "operand": 24
364
+ },
365
+ {
366
+ "code_offset": 517410,
367
+ "file_offset": 517442,
368
+ "index": 174713,
369
+ "opcode": "LOAD4",
370
+ "operand": null
371
+ },
372
+ {
373
+ "code_offset": 517411,
374
+ "file_offset": 517443,
375
+ "index": 174714,
376
+ "opcode": "CONST",
377
+ "operand": 104
378
+ },
379
+ {
380
+ "code_offset": 517416,
381
+ "file_offset": 517448,
382
+ "index": 174715,
383
+ "opcode": "ADD",
384
+ "operand": null
385
+ },
386
+ {
387
+ "code_offset": 517417,
388
+ "file_offset": 517449,
389
+ "index": 174716,
390
+ "opcode": "LOCAL",
391
+ "operand": 36
392
+ },
393
+ {
394
+ "code_offset": 517422,
395
+ "file_offset": 517454,
396
+ "index": 174717,
397
+ "opcode": "LOAD4",
398
+ "operand": null
399
+ },
400
+ {
401
+ "code_offset": 517423,
402
+ "file_offset": 517455,
403
+ "index": 174718,
404
+ "opcode": "STORE4",
405
+ "operand": null
406
+ },
407
+ {
408
+ "code_offset": 517424,
409
+ "file_offset": 517456,
410
+ "index": 174719,
411
+ "opcode": "LOCAL",
412
+ "operand": 28
413
+ },
414
+ {
415
+ "code_offset": 517429,
416
+ "file_offset": 517461,
417
+ "index": 174720,
418
+ "opcode": "LOAD4",
419
+ "operand": null
420
+ },
421
+ {
422
+ "code_offset": 517430,
423
+ "file_offset": 517462,
424
+ "index": 174721,
425
+ "opcode": "ARG",
426
+ "operand": 8
427
+ },
428
+ {
429
+ "code_offset": 517432,
430
+ "file_offset": 517464,
431
+ "index": 174722,
432
+ "opcode": "CONST",
433
+ "operand": 175123
434
+ },
435
+ {
436
+ "code_offset": 517437,
437
+ "file_offset": 517469,
438
+ "index": 174723,
439
+ "opcode": "CALL",
440
+ "operand": null
441
+ },
442
+ {
443
+ "code_offset": 517438,
444
+ "file_offset": 517470,
445
+ "index": 174724,
446
+ "opcode": "POP",
447
+ "operand": null
448
+ },
449
+ {
450
+ "code_offset": 517439,
451
+ "file_offset": 517471,
452
+ "index": 174725,
453
+ "opcode": "LOCAL",
454
+ "operand": 28
455
+ },
456
+ {
457
+ "code_offset": 517444,
458
+ "file_offset": 517476,
459
+ "index": 174726,
460
+ "opcode": "LOAD4",
461
+ "operand": null
462
+ },
463
+ {
464
+ "code_offset": 517445,
465
+ "file_offset": 517477,
466
+ "index": 174727,
467
+ "opcode": "ARG",
468
+ "operand": 8
469
+ },
470
+ {
471
+ "code_offset": 517447,
472
+ "file_offset": 517479,
473
+ "index": 174728,
474
+ "opcode": "CONST",
475
+ "operand": 142502
476
+ },
477
+ {
478
+ "code_offset": 517452,
479
+ "file_offset": 517484,
480
+ "index": 174729,
481
+ "opcode": "CALL",
482
+ "operand": null
483
+ },
484
+ {
485
+ "code_offset": 517453,
486
+ "file_offset": 517485,
487
+ "index": 174730,
488
+ "opcode": "POP",
489
+ "operand": null
490
+ },
491
+ {
492
+ "code_offset": 517454,
493
+ "file_offset": 517486,
494
+ "index": 174731,
495
+ "opcode": "LOCAL",
496
+ "operand": 24
497
+ },
498
+ {
499
+ "code_offset": 517459,
500
+ "file_offset": 517491,
501
+ "index": 174732,
502
+ "opcode": "LOAD4",
503
+ "operand": null
504
+ },
505
+ {
506
+ "code_offset": 517460,
507
+ "file_offset": 517492,
508
+ "index": 174733,
509
+ "opcode": "CONST",
510
+ "operand": 3096
511
+ },
512
+ {
513
+ "code_offset": 517465,
514
+ "file_offset": 517497,
515
+ "index": 174734,
516
+ "opcode": "ADD",
517
+ "operand": null
518
+ },
519
+ {
520
+ "code_offset": 517466,
521
+ "file_offset": 517498,
522
+ "index": 174735,
523
+ "opcode": "LOAD4",
524
+ "operand": null
525
+ },
526
+ {
527
+ "code_offset": 517467,
528
+ "file_offset": 517499,
529
+ "index": 174736,
530
+ "opcode": "CONST",
531
+ "operand": 3
532
+ }
533
+ ],
534
+ "direct_call": true,
535
+ "instruction": 174728,
536
+ "owner": 174399,
537
+ "target": 142502
538
+ },
539
+ {
540
+ "context": [
541
+ {
542
+ "code_offset": 604044,
543
+ "file_offset": 604076,
544
+ "index": 203194,
545
+ "opcode": "LOAD4",
546
+ "operand": null
547
+ },
548
+ {
549
+ "code_offset": 604045,
550
+ "file_offset": 604077,
551
+ "index": 203195,
552
+ "opcode": "LOAD4",
553
+ "operand": null
554
+ },
555
+ {
556
+ "code_offset": 604046,
557
+ "file_offset": 604078,
558
+ "index": 203196,
559
+ "opcode": "CONST",
560
+ "operand": 64
561
+ },
562
+ {
563
+ "code_offset": 604051,
564
+ "file_offset": 604083,
565
+ "index": 203197,
566
+ "opcode": "BXOR",
567
+ "operand": null
568
+ },
569
+ {
570
+ "code_offset": 604052,
571
+ "file_offset": 604084,
572
+ "index": 203198,
573
+ "opcode": "STORE4",
574
+ "operand": null
575
+ },
576
+ {
577
+ "code_offset": 604053,
578
+ "file_offset": 604085,
579
+ "index": 203199,
580
+ "opcode": "LOCAL",
581
+ "operand": 28
582
+ },
583
+ {
584
+ "code_offset": 604058,
585
+ "file_offset": 604090,
586
+ "index": 203200,
587
+ "opcode": "LOAD4",
588
+ "operand": null
589
+ },
590
+ {
591
+ "code_offset": 604059,
592
+ "file_offset": 604091,
593
+ "index": 203201,
594
+ "opcode": "ARG",
595
+ "operand": 8
596
+ },
597
+ {
598
+ "code_offset": 604061,
599
+ "file_offset": 604093,
600
+ "index": 203202,
601
+ "opcode": "LOCAL",
602
+ "operand": 68
603
+ },
604
+ {
605
+ "code_offset": 604066,
606
+ "file_offset": 604098,
607
+ "index": 203203,
608
+ "opcode": "LOAD4",
609
+ "operand": null
610
+ },
611
+ {
612
+ "code_offset": 604067,
613
+ "file_offset": 604099,
614
+ "index": 203204,
615
+ "opcode": "ARG",
616
+ "operand": 12
617
+ },
618
+ {
619
+ "code_offset": 604069,
620
+ "file_offset": 604101,
621
+ "index": 203205,
622
+ "opcode": "CONST",
623
+ "operand": 1
624
+ },
625
+ {
626
+ "code_offset": 604074,
627
+ "file_offset": 604106,
628
+ "index": 203206,
629
+ "opcode": "ARG",
630
+ "operand": 16
631
+ },
632
+ {
633
+ "code_offset": 604076,
634
+ "file_offset": 604108,
635
+ "index": 203207,
636
+ "opcode": "CONST",
637
+ "operand": 30550
638
+ },
639
+ {
640
+ "code_offset": 604081,
641
+ "file_offset": 604113,
642
+ "index": 203208,
643
+ "opcode": "CALL",
644
+ "operand": null
645
+ },
646
+ {
647
+ "code_offset": 604082,
648
+ "file_offset": 604114,
649
+ "index": 203209,
650
+ "opcode": "POP",
651
+ "operand": null
652
+ },
653
+ {
654
+ "code_offset": 604083,
655
+ "file_offset": 604115,
656
+ "index": 203210,
657
+ "opcode": "LOCAL",
658
+ "operand": 68
659
+ },
660
+ {
661
+ "code_offset": 604088,
662
+ "file_offset": 604120,
663
+ "index": 203211,
664
+ "opcode": "LOAD4",
665
+ "operand": null
666
+ },
667
+ {
668
+ "code_offset": 604089,
669
+ "file_offset": 604121,
670
+ "index": 203212,
671
+ "opcode": "CONST",
672
+ "operand": 488
673
+ },
674
+ {
675
+ "code_offset": 604094,
676
+ "file_offset": 604126,
677
+ "index": 203213,
678
+ "opcode": "ADD",
679
+ "operand": null
680
+ },
681
+ {
682
+ "code_offset": 604095,
683
+ "file_offset": 604127,
684
+ "index": 203214,
685
+ "opcode": "LOCAL",
686
+ "operand": 28
687
+ },
688
+ {
689
+ "code_offset": 604100,
690
+ "file_offset": 604132,
691
+ "index": 203215,
692
+ "opcode": "LOAD4",
693
+ "operand": null
694
+ },
695
+ {
696
+ "code_offset": 604101,
697
+ "file_offset": 604133,
698
+ "index": 203216,
699
+ "opcode": "CONST",
700
+ "operand": 20
701
+ },
702
+ {
703
+ "code_offset": 604106,
704
+ "file_offset": 604138,
705
+ "index": 203217,
706
+ "opcode": "ADD",
707
+ "operand": null
708
+ },
709
+ {
710
+ "code_offset": 604107,
711
+ "file_offset": 604139,
712
+ "index": 203218,
713
+ "opcode": "BLOCK_COPY",
714
+ "operand": 12
715
+ },
716
+ {
717
+ "code_offset": 604112,
718
+ "file_offset": 604144,
719
+ "index": 203219,
720
+ "opcode": "LOCAL",
721
+ "operand": 68
722
+ },
723
+ {
724
+ "code_offset": 604117,
725
+ "file_offset": 604149,
726
+ "index": 203220,
727
+ "opcode": "LOAD4",
728
+ "operand": null
729
+ },
730
+ {
731
+ "code_offset": 604118,
732
+ "file_offset": 604150,
733
+ "index": 203221,
734
+ "opcode": "ARG",
735
+ "operand": 8
736
+ },
737
+ {
738
+ "code_offset": 604120,
739
+ "file_offset": 604152,
740
+ "index": 203222,
741
+ "opcode": "CONST",
742
+ "operand": 142502
743
+ },
744
+ {
745
+ "code_offset": 604125,
746
+ "file_offset": 604157,
747
+ "index": 203223,
748
+ "opcode": "CALL",
749
+ "operand": null
750
+ },
751
+ {
752
+ "code_offset": 604126,
753
+ "file_offset": 604158,
754
+ "index": 203224,
755
+ "opcode": "POP",
756
+ "operand": null
757
+ },
758
+ {
759
+ "code_offset": 604127,
760
+ "file_offset": 604159,
761
+ "index": 203225,
762
+ "opcode": "CONST",
763
+ "operand": 70763
764
+ },
765
+ {
766
+ "code_offset": 604132,
767
+ "file_offset": 604164,
768
+ "index": 203226,
769
+ "opcode": "ARG",
770
+ "operand": 8
771
+ },
772
+ {
773
+ "code_offset": 604134,
774
+ "file_offset": 604166,
775
+ "index": 203227,
776
+ "opcode": "LOCAL",
777
+ "operand": 28
778
+ },
779
+ {
780
+ "code_offset": 604139,
781
+ "file_offset": 604171,
782
+ "index": 203228,
783
+ "opcode": "LOAD4",
784
+ "operand": null
785
+ },
786
+ {
787
+ "code_offset": 604140,
788
+ "file_offset": 604172,
789
+ "index": 203229,
790
+ "opcode": "CONST",
791
+ "operand": 140
792
+ },
793
+ {
794
+ "code_offset": 604145,
795
+ "file_offset": 604177,
796
+ "index": 203230,
797
+ "opcode": "ADD",
798
+ "operand": null
799
+ }
800
+ ],
801
+ "direct_call": true,
802
+ "instruction": 203222,
803
+ "owner": 203011,
804
+ "target": 142502
805
+ },
806
+ {
807
+ "context": [
808
+ {
809
+ "code_offset": 653678,
810
+ "file_offset": 653710,
811
+ "index": 219981,
812
+ "opcode": "ADD",
813
+ "operand": null
814
+ },
815
+ {
816
+ "code_offset": 653679,
817
+ "file_offset": 653711,
818
+ "index": 219982,
819
+ "opcode": "LOCAL",
820
+ "operand": 52
821
+ },
822
+ {
823
+ "code_offset": 653684,
824
+ "file_offset": 653716,
825
+ "index": 219983,
826
+ "opcode": "LOAD4",
827
+ "operand": null
828
+ },
829
+ {
830
+ "code_offset": 653685,
831
+ "file_offset": 653717,
832
+ "index": 219984,
833
+ "opcode": "CONST",
834
+ "operand": 520
835
+ },
836
+ {
837
+ "code_offset": 653690,
838
+ "file_offset": 653722,
839
+ "index": 219985,
840
+ "opcode": "ADD",
841
+ "operand": null
842
+ },
843
+ {
844
+ "code_offset": 653691,
845
+ "file_offset": 653723,
846
+ "index": 219986,
847
+ "opcode": "LOAD4",
848
+ "operand": null
849
+ },
850
+ {
851
+ "code_offset": 653692,
852
+ "file_offset": 653724,
853
+ "index": 219987,
854
+ "opcode": "CONST",
855
+ "operand": 20
856
+ },
857
+ {
858
+ "code_offset": 653697,
859
+ "file_offset": 653729,
860
+ "index": 219988,
861
+ "opcode": "ADD",
862
+ "operand": null
863
+ },
864
+ {
865
+ "code_offset": 653698,
866
+ "file_offset": 653730,
867
+ "index": 219989,
868
+ "opcode": "BLOCK_COPY",
869
+ "operand": 12
870
+ },
871
+ {
872
+ "code_offset": 653703,
873
+ "file_offset": 653735,
874
+ "index": 219990,
875
+ "opcode": "LOCAL",
876
+ "operand": 72
877
+ },
878
+ {
879
+ "code_offset": 653708,
880
+ "file_offset": 653740,
881
+ "index": 219991,
882
+ "opcode": "LOAD4",
883
+ "operand": null
884
+ },
885
+ {
886
+ "code_offset": 653709,
887
+ "file_offset": 653741,
888
+ "index": 219992,
889
+ "opcode": "CONST",
890
+ "operand": 520
891
+ },
892
+ {
893
+ "code_offset": 653714,
894
+ "file_offset": 653746,
895
+ "index": 219993,
896
+ "opcode": "ADD",
897
+ "operand": null
898
+ },
899
+ {
900
+ "code_offset": 653715,
901
+ "file_offset": 653747,
902
+ "index": 219994,
903
+ "opcode": "LOAD4",
904
+ "operand": null
905
+ },
906
+ {
907
+ "code_offset": 653716,
908
+ "file_offset": 653748,
909
+ "index": 219995,
910
+ "opcode": "CONST",
911
+ "operand": 3096
912
+ },
913
+ {
914
+ "code_offset": 653721,
915
+ "file_offset": 653753,
916
+ "index": 219996,
917
+ "opcode": "ADD",
918
+ "operand": null
919
+ },
920
+ {
921
+ "code_offset": 653722,
922
+ "file_offset": 653754,
923
+ "index": 219997,
924
+ "opcode": "LOAD4",
925
+ "operand": null
926
+ },
927
+ {
928
+ "code_offset": 653723,
929
+ "file_offset": 653755,
930
+ "index": 219998,
931
+ "opcode": "CONST",
932
+ "operand": 3
933
+ },
934
+ {
935
+ "code_offset": 653728,
936
+ "file_offset": 653760,
937
+ "index": 219999,
938
+ "opcode": "EQ",
939
+ "operand": 220006
940
+ },
941
+ {
942
+ "code_offset": 653733,
943
+ "file_offset": 653765,
944
+ "index": 220000,
945
+ "opcode": "LOCAL",
946
+ "operand": 72
947
+ },
948
+ {
949
+ "code_offset": 653738,
950
+ "file_offset": 653770,
951
+ "index": 220001,
952
+ "opcode": "LOAD4",
953
+ "operand": null
954
+ },
955
+ {
956
+ "code_offset": 653739,
957
+ "file_offset": 653771,
958
+ "index": 220002,
959
+ "opcode": "ARG",
960
+ "operand": 8
961
+ },
962
+ {
963
+ "code_offset": 653741,
964
+ "file_offset": 653773,
965
+ "index": 220003,
966
+ "opcode": "CONST",
967
+ "operand": -31
968
+ },
969
+ {
970
+ "code_offset": 653746,
971
+ "file_offset": 653778,
972
+ "index": 220004,
973
+ "opcode": "CALL",
974
+ "operand": null
975
+ },
976
+ {
977
+ "code_offset": 653747,
978
+ "file_offset": 653779,
979
+ "index": 220005,
980
+ "opcode": "POP",
981
+ "operand": null
982
+ },
983
+ {
984
+ "code_offset": 653748,
985
+ "file_offset": 653780,
986
+ "index": 220006,
987
+ "opcode": "LOCAL",
988
+ "operand": 72
989
+ },
990
+ {
991
+ "code_offset": 653753,
992
+ "file_offset": 653785,
993
+ "index": 220007,
994
+ "opcode": "LOAD4",
995
+ "operand": null
996
+ },
997
+ {
998
+ "code_offset": 653754,
999
+ "file_offset": 653786,
1000
+ "index": 220008,
1001
+ "opcode": "ARG",
1002
+ "operand": 8
1003
+ },
1004
+ {
1005
+ "code_offset": 653756,
1006
+ "file_offset": 653788,
1007
+ "index": 220009,
1008
+ "opcode": "CONST",
1009
+ "operand": 142502
1010
+ },
1011
+ {
1012
+ "code_offset": 653761,
1013
+ "file_offset": 653793,
1014
+ "index": 220010,
1015
+ "opcode": "CALL",
1016
+ "operand": null
1017
+ },
1018
+ {
1019
+ "code_offset": 653762,
1020
+ "file_offset": 653794,
1021
+ "index": 220011,
1022
+ "opcode": "POP",
1023
+ "operand": null
1024
+ },
1025
+ {
1026
+ "code_offset": 653763,
1027
+ "file_offset": 653795,
1028
+ "index": 220012,
1029
+ "opcode": "PUSH",
1030
+ "operand": null
1031
+ },
1032
+ {
1033
+ "code_offset": 653764,
1034
+ "file_offset": 653796,
1035
+ "index": 220013,
1036
+ "opcode": "LEAVE",
1037
+ "operand": 64
1038
+ },
1039
+ {
1040
+ "code_offset": 653769,
1041
+ "file_offset": 653801,
1042
+ "index": 220014,
1043
+ "opcode": "ENTER",
1044
+ "operand": 8
1045
+ },
1046
+ {
1047
+ "code_offset": 653774,
1048
+ "file_offset": 653806,
1049
+ "index": 220015,
1050
+ "opcode": "PUSH",
1051
+ "operand": null
1052
+ },
1053
+ {
1054
+ "code_offset": 653775,
1055
+ "file_offset": 653807,
1056
+ "index": 220016,
1057
+ "opcode": "LEAVE",
1058
+ "operand": 8
1059
+ },
1060
+ {
1061
+ "code_offset": 653780,
1062
+ "file_offset": 653812,
1063
+ "index": 220017,
1064
+ "opcode": "ENTER",
1065
+ "operand": 12
1066
+ }
1067
+ ],
1068
+ "direct_call": true,
1069
+ "instruction": 220009,
1070
+ "owner": 219630,
1071
+ "target": 142502
1072
+ }
1073
+ ],
1074
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1075
+ "source": {
1076
+ "archive": "zUrT43_qvm.pk3",
1077
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1078
+ "member": {
1079
+ "bytes": 983300,
1080
+ "comment_hex": "",
1081
+ "compressed_bytes": 246560,
1082
+ "compression": 8,
1083
+ "crc32": "98ea1768",
1084
+ "create_system": 0,
1085
+ "create_version": 63,
1086
+ "date_time": [
1087
+ 2018,
1088
+ 6,
1089
+ 18,
1090
+ 22,
1091
+ 11,
1092
+ 50
1093
+ ],
1094
+ "directory": false,
1095
+ "entry_index": 2,
1096
+ "external_attr": 32,
1097
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1098
+ "extract_version": 20,
1099
+ "flags": 0,
1100
+ "header_offset": 221309,
1101
+ "internal_attr": 0,
1102
+ "occurrence": 0,
1103
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1104
+ "path": "vm/qagame.qvm",
1105
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1106
+ "type": "member",
1107
+ "volume": 0
1108
+ }
1109
+ }
1110
+ }
scripts/analyze_qvm_history_callers.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Exhaustive literal references and direct call owners for history producers."""
3
+ from pathlib import Path
4
+ from qvm_research_support import source
5
+ from analyze_qvm import write_json
6
+ TARGETS=[142502,142773]
7
+ def inventory(ins):
8
+ owners={};owner=None
9
+ for i in ins:
10
+ if i['opcode']=='ENTER':owner=i['index']
11
+ owners[i['index']]=owner
12
+ rows=[]
13
+ for i in ins:
14
+ if i['opcode']=='CONST' and i['operand'] in TARGETS:
15
+ pc=i['index'];direct=ins[pc+1]['opcode']=='CALL';rows.append({'target':i['operand'],'instruction':pc,'owner':owners[pc],'direct_call':direct,'context':ins[max(owners[pc],pc-28):pc+9]})
16
+ return rows
17
+
18
+ def main():
19
+ q,raw,h,ins=source();rows=inventory(ins);tables=[]
20
+ for address in range(0,h['data_length'],4):
21
+ value=int.from_bytes(raw[h['data_offset']+address:h['data_offset']+address+4],'little')
22
+ if value in TARGETS:tables.append({'address':address,'value':value})
23
+ write_json(Path('docs/research/qvm-history-callers.json'),{'source':q['source'],'sha256':q['sha256'],'references':rows,'aligned_data_matches':tables,'limits':'Complete decoded CONST inventory and aligned initialized-data matches only. Direct literal CALLs are identified; data matches are candidates, not proven function pointers. Context records do not establish dynamic scheduling, reachability or indirect dispatch.'})
24
+ if __name__=='__main__':main()
scripts/test_qvm_history_callers.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from qvm_research_support import source
4
+ class HistoryCallerTests(unittest.TestCase):
5
+ @classmethod
6
+ def setUpClass(cls):cls.r=json.loads(Path('docs/research/qvm-history-callers.json').read_text());cls.ins=source()[3]
7
+ def test_exhaustive_literal_reference_inventory(self):
8
+ expected=[i['index'] for i in self.ins if i['opcode']=='CONST' and i['operand'] in [142502,142773]];self.assertEqual([p['instruction'] for p in self.r['references']],expected)
9
+ def test_direct_call_owner_contracts(self):
10
+ self.assertEqual([(p['target'],p['owner']) for p in self.r['references']],[(142773,156173),(142502,174399),(142502,203011),(142502,219630)])
11
+ for p in self.r['references']:self.assertTrue(p['direct_call']);self.assertEqual(self.ins[p['instruction']+1]['opcode'],'CALL');self.assertEqual(max(i['index'] for i in self.ins[:p['instruction']] if i['opcode']=='ENTER'),p['owner'])
12
+ def test_contexts_preserve_actual_instructions(self):
13
+ for p in self.r['references']:
14
+ for i in p['context']:self.assertEqual(i,self.ins[i['index']])
15
+ def test_no_aligned_initialized_data_match(self):self.assertEqual(self.r['aligned_data_matches'],[])
16
+ if __name__=='__main__':unittest.main()