Я использовал objdump
для дизассемблирования всех функций в скомпилированном библиотечном файле и записал вывод в файл text
. В файле text
вывод функции с именем clear_bit
выглядит следующим образом.
Disassembly of section .text.stm32f30x::spi1::cr1::_CRCENW::clear_bit:
0: 80 b5 84 b0 addlt r11, r4, r0, lsl #11
4: 01 46 03 90 andls r4, r3, r1, lsl #12
8: 03 98 00 22 andhs r9, r0, #196608
c: 02 91 11 46 ldrmi r9, [r1], -r2, lsl #2
10: ff f7 fe ff <unknown>
14: 01 90 ff e7 ldrb r9, [pc, r1]!
18: 01 98 04 b0 andlt r9, r4, r1, lsl #16
1c: 80 <unknown>
1d: bd <unknown>
Вывод другой функции set_bit
выглядит следующим образом -:
Disassembly of section .text.stm32f30x::spi1::cr1::_CRCNEXTW::set_bit:
0: 80 b5 84 b0 addlt r11, r4, r0, lsl #11
4: 01 46 03 90 andls r4, r3, r1, lsl #12
8: 03 98 01 22 andhs r9, r1, #196608
c: 02 91 11 46 ldrmi r9, [r1], -r2, lsl #2
10: ff f7 fe ff <unknown>
14: 01 90 ff e7 ldrb r9, [pc, r1]!
18: 01 98 04 b0 andlt r9, r4, r1, lsl #16
1c: 80 <unknown>
1d: bd <unknown>
Подобно двум вышеупомянутым функциям, output.txt
содержит разборку более 100 таких функций. Тем не менее, здесь мне нужно получить только значения шестнадцатеричных байтов [80,b5,84,b0,01,..,b0,80,bd]
, которые соответствуют каждой функции без инструкций по сборке, имен функций, смещений и т. Д. Я пытаюсь извлечь эти последовательности байтов, соответствующие каждой функции. без единой последовательности для разработки модели в машинном обучении. Следующее - это то, что я ожидаю только для двух функций. (Комментарии даны только для понимания цели, мне не нужно ничего из этого в моем ожидаемом выводе)
// byte sequence related to first function
80 b5 84 b0 01 46 03 90 03 98 00 22 02 91 11 46 ff f7 fe ff 01 90 ff
e7 01 98 04 b0 80 bd
// byte sequence related to second function separated by a line
80 b5 84 b0 01 46 03 90 03 98 01 22 02 91 11 46 ff f7 fe ff 01 90 ff
e7 01 98 04 b0 80 bd
Я использовал команду xxd -g 1
, но она дает мнепоследовательность байтов, описанная ниже со смещением, некоторыми другими значениями справа от значений байтов и, похоже, содержит разборку всех разделов (не только код в текстовом разделе).
00000000: 21 3c 61 72 63 68 3e 0a 2f 20 20 20 20 20 20 20 !<arch>./
00000010: 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 0
00000020: 20 20 20 20 30 20 20 20 20 20 30 20 20 20 20 20 0 0
00000030: 30 20 20 20 20 20 20 20 34 37 33 32 34 30 20 20 0 473240
00000040: 20 20 60 0a 00 00 1c 8c 00 07 aa ea 00 07 aa ea `.............
00000050: 00 07 aa ea 00 07 aa ea 00 07 aa ea 00 07 aa ea ................
00000060: 00 07 aa ea 00 07 aa ea 00 07 aa ea 00 07 aa ea ................
00000070: 00 07 aa ea 00 07 aa ea 00 07 aa ea 00 07 aa ea ................
00000080: 00 07 aa ea 00 07 aa ea 00 07 aa ea 00 07 aa ea ................
00000090: 00 07 aa ea 00 07 aa ea 00 07 aa ea 00 07 aa ea ................
000000a0: 00 07 aa ea 00 07 aa ea 00 07 aa ea 00 07 aa ea ................
000000b0: 00 08 1a 1a 00 08 1a 1a 00 08 1a 1a 00 08 1a 1a ................
000000c0: 00 08 1a 1a 00 08 1a 1a 00 08 3a ee 00 08 3a ee ..........:...:.
Я пробовал разные инструменты и проходил через другие подобные вопросы переполнения стека, но до сих пор не получилось. Я не знаю, неправильно ли я использую xxd
, или есть другие инструменты для достижения моей цели. Любая помощь будет высоко ценится. Спасибо!