добавил вспомогательный инструмент callsites в мой bn инструмент. Я использую его для поиска вызывающих функций каждого вызова crt rand, чтобы я мог аннотировать их в своих портах на python/zig. Таким образом, мы можем не только видеть, что мы сгенерировали одинаковое количество rng вызовов, но и различать их и связывать с конкретным местом в декомпиляции. Это должно оказаться бесценным для разработки детерминированной симуляции в порте, которая зависит от совпадающего потока rng. $ bn callsites crt_rand --target crimsonland.exe.bndb --within fx_queue_add_random --caller-static caller_static 0x427760 | call 0x42775b within: fx_queue_add_random @ 0x427700 callee: crt_rand @ 0x461746 call-index: 0 within-query: fx_queue_add_random hlil: float.t(crt_rand() & 0xf) * fconvert.t(0.00999999978f) + fconvert.t(0.839999974f) context: 0x427749 mov dword [0x49042c], 0x3f47ae14 0x427753 call 0x460d86 0x427758 add esp, 0x4 > 0x42775b call 0x461746 0x427760 and eax, 0xf 0x427763 mov dword [esp], eax 0x427767 fild st0, dword [esp]
забыл прикрепить картинку, так что вот как я это использую. это позволит сопоставить каждый отдельный rand с местом вызова, так что я смогу легко выявить любые оставшиеся расхождения.
3,04K