Сообщение Re[5]: Библиотека для редактирования бинарников. от 01.02.2017 10:18
Изменено 01.02.2017 10:28 drVanо
Re[5]: Библиотека для редактирования бинарников.
Здравствуйте, Andrew.W Worobow, Вы писали:
V>>Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.
AWW>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.
Нет, спасибо
V>>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?
AWW>>>Обрабатываются как перекрестная ссылка из данных.
V>>Ну ну
AWW>И что?
Мдеее... Так понятнее?
V>>Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.
AWW>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.
Нет, спасибо
V>>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?
AWW>>>Обрабатываются как перекрестная ссылка из данных.
V>>Ну ну
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
...
0000000180010592 mov r11, xxx
0000000180010599 jmp 00000001800105D5
...
000000018001059B mov r11, xxx
00000001800105A2 jmp 00000001800105D5
...
00000001800105A4 mov r11, xxx
00000001800105AB jmp 00000001800105D5
...
00000001800105AD mov r11, xxx
00000001800105B4 jmp 00000001800105D5
...
00000001800105B6 mov r11, xxx
00000001800105BD mov bl, 01
00000001800105BF jmp 00000001800105D5
...
00000001800105C1 mov r11, xxx
00000001800105C8 mov bl, 01
00000001800105CA jmp 00000001800105D5
...
00000001800105CC mov r11, ...
00000001800105D3 mov bl, 01
...
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 CaseRe[5]: Библиотека для редактирования бинарников.
Здравствуйте, Andrew.W Worobow, Вы писали:
V>>Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.
AWW>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.
Нет, спасибо
V>>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?
AWW>>>Обрабатываются как перекрестная ссылка из данных.
V>>Ну ну
AWW>И что?
Мдеее... Так понятнее?
Это был самый "простой" вариант (MSVC), где к смещениям прибавляется ImageBase (без всяких релоков!), а вариант "посложнее" (CLANG):
V>>Я вам как раз и пишу, что недостаточно перенести саму RUNTIME_FUNCTION, нужно еще переносить все на что показывает UNWIND_INFO в плане "variable Language-specific handler data (optional)" — это компиляторо зависимая шняга.
AWW>Ну дык, и я вам пишу — берете и делаете ручками, для своей конкретной задачи, для своего образа, для своего отдетектированного компилятора, то что вам надо — берете и пишите и пушите. Я сделал ровно то что надо было мне — в моем конкретном случае. У меня НЕ стояла задача сделать так чтобы работали исключения — у мне они были (должны были) быть запрещены, ибо их использовать нельзя.
Нет, спасибо
V>>>>P.P.S. В исходниках сходу на нашел обработку SWITCH + JMP таблиц для них. Как это дело у вас перестраивается?
AWW>>>Обрабатываются как перекрестная ссылка из данных.
V>>Ну ну
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
...
0000000180010592 mov r11, xxx
0000000180010599 jmp 00000001800105D5
...
000000018001059B mov r11, xxx
00000001800105A2 jmp 00000001800105D5
...
00000001800105A4 mov r11, xxx
00000001800105AB jmp 00000001800105D5
...
00000001800105AD mov r11, xxx
00000001800105B4 jmp 00000001800105D5
...
00000001800105B6 mov r11, xxx
00000001800105BD mov bl, 01
00000001800105BF jmp 00000001800105D5
...
00000001800105C1 mov r11, xxx
00000001800105C8 mov bl, 01
00000001800105CA jmp 00000001800105D5
...
00000001800105CC mov r11, ...
00000001800105D3 mov bl, 01
...
0000000180010BC0 dd 000105B6 Case (180000000 + 000105B6 = 1800105B6)
0000000180010BC4 dd 000105C1 Case (180000000 + 000105C1 = 1800105C1)
0000000180010BC8 dd 000105CC Case (180000000 + 000105CC = 1800105CC)
0000000180010BCC dd 000105A4 Case (180000000 + 000105A4 = 1800105A4)
0000000180010BD0 dd 00010592 Case (180000000 + 00010592 = 180010592)
0000000180010BD4 dd 000105AD Case (180000000 + 000105AD = 1800105AD)
0000000180010BD8 dd 0001059B Case (180000000 + 0001059B = 18001059B)Это был самый "простой" вариант (MSVC), где к смещениям прибавляется ImageBase (без всяких релоков!), а вариант "посложнее" (CLANG):
0000000000007267 lea rdx, [00000000000075B8]
000000000000726E movsxd rcx, dword ptr [rdx+rcx*4]
0000000000007272 add rcx, rdx
0000000000007275 jmp rcx
...
00000000000075B8 dd FFFFFCCD Case (00000000000075B8 + FFFFFCCD = 0000000000007285)
00000000000075BC dd FFFFFCBF Case (00000000000075B8 + FFFFFCBF = 0000000000007277)
00000000000075C0 dd FFFFFCC7 Case (00000000000075B8 + FFFFFCC7 = 000000000000727F)
00000000000075C4 dd FFFFFE46 Case (00000000000075B8 + FFFFFE46 = 00000000000073FE)
00000000000075C8 dd FFFFFE59 Case (00000000000075B8 + FFFFFE59 = 0000000000007411)
00000000000075CC dd FFFFFE4D Case (00000000000075B8 + FFFFFE4D = 0000000000007405)
00000000000075D0 dd FFFFFE54 Case (00000000000075B8 + FFFFFE54 = 000000000000740C)