Здравствуйте, Andrew.W Worobow, Вы писали:
V>>P.S. Я вам по секрету скажу, что парсинга RUNTIME_FUNCTION для этого совершенно недостаточно, оттуда растет еще много чего интересного, и явные ссылки в виде релоков там отсутствуют напрочь.
AWW>Парсинг таблиц функций, там делается по сути только для того чтобы их воспроизвести в новом образе и для того чтобы эти функции обнаружить, если нет PDB данных. То есть они частично переезжают в новый как есть, частично ну в том объеме в котором эти функции включатся в новый. Если фрагмент старого кода выбрасывается, то и в таблицу они не перенесутся.
Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.
V>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?
AWW>Обрабатываются как перекрестная ссылка из данных.
Ну ну
0000000180010574 lea rcx, [0000000180000000]
000000018001057B movsxd rax, r9d
000000018001057E mov eax, [rcx+rax*4+00010BC0]
0000000180010585 xor bl, bl
0000000180010587 mov rbp, r8
000000018001058A add rax, rcx
000000018001058D mov r12, rdx
0000000180010590 jmp rax
...
0000000180010BC0 B6050100 dd 000105B6 Case
0000000180010BC4 C1050100 dd 000105C1 Case
0000000180010BC8 CC050100 dd 000105CC Case
0000000180010BCC A4050100 dd 000105A4 Case
0000000180010BD0 92050100 dd 00010592 Case
0000000180010BD4 AD050100 dd 000105AD Case
0000000180010BD8 9B050100 dd 0001059B Case