Форум программистов, компьютерный форум, киберфорум
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 2

Как добавить в исполняемый ELF дополнительную загружаемую секцию?

16.08.2019, 15:42. Показов 1609. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ковыряю дизассемблером исполняемую программу из недорогого тепловизора HT-1A. Производитель сильно облегчил это дело, оставив всю отладочную информацию в программе

Ковыряю для того, чтобы немного улучшить и изменить интерфейс. И столкнулся с тем, что в некоторых моментах мне нужно не просто изменить байты в теле программы, а добавить их. Естественно, просто вставить их нельзя - полетят к чертям все ссылки на код и данные. Поэтому пришла мне в голову мысль добавить в конец файла килобайт 10, добавить в таблицу заголовков программы еще один, загружаемый в из этих 10 кб, и в этих 10 кб уже дописывать какие-то свои моменты, при необходимости прыгая на них из оригинального кода.

Можно ли это сделать и если можно, то как? Что-то все мои попытки приводят к неработоспособности файла. Пока я пытался изменить заголовок NOTE на LOAD, пытаясь загрузить небольшой кусок этого файла в память по адресу, следующему за последним используемым программой Пока я не назначаю ему тип LOAD и не определяю адреса загрузки - файл работает, даже если я меняю его на NULL. То есть сам этот заголовок NOTE файлу для работы не нужен, как и секции, определенный в его адресах - .note.ABI-tag и .note.gnu.build-id

При запуске измененного файла ОС тепловизора просто выдает сообщение Killed без подробностей. Системные логи, насколько я понял, не ведутся.

Code
1
2
3
[root@dragonboard ]# /work/app/ht-a1 -v 2
Killed
[root@dragonboard ]#
Система основана на Busybox v1.22.1.

Вот лог загрузки, если это может помочь:

Кликните здесь для просмотра всего текста

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
HELLO! BOOT0 is starting!
boot0 version : 3.1.0
reg_addr 0x01f00100 =0x00000000
reg_addr 0x01f00104 =0x00000000
reg_addr 0x01f00108 =0x00000000
reg_addr 0x01f0010c =0x00000000
reg_addr 0x01f00110 =0x00000000
reg_addr 0x01f00114 =0x00000000
DRAM DRIVE INFO: V1.5
DRAM CLK =552 MHZ
DRAM simple test OK.
dram size =512
card boot number = 2
card no is 2
sdcard 2 line count 0
[mmc]: mmc driver ver 2014-07-07 16:54
[mmc]: ***Try SD card 2***
[mmc]: mmc 2 cmd 8 timeout, err 0x00000100
[mmc]: mmc 2 cmd 8 err 0x00000100
[mmc]: mmc 2 send if cond failed
[mmc]: mmc 2 cmd 55 timeout, err 0x00000100
[mmc]: mmc 2 cmd 55 err 0x00000100
[mmc]: mmc 2 send app cmd failed
[mmc]: ***Try MMC card 2***
[mmc]: MMC ver 4.5
[mmc]: SD/MMC Card: 4bit, capacity: 3728MB
[mmc]: vendor: Man 0x0090014a Snr 0x011932c4
[mmc]: product: H4G2a
[mmc]: revision: 1.1
[mmc]: ***SD/MMC 2 init OK!!!***
sdcard 2 init ok
The size of uboot is 0x000bc000.
sum=0x0ccccd69
src_sum=0x0ccccd69
set_mmc_para,sdly 50M 0
set_mmc_para,sdly 25M 0
Succeed in loading uboot from sdmmc flash.
Ready to disable icache.
Jump to secend Boot.
[      0.335]
 
U-Boot 2011.09-rc1 (Jun 19 2018 - 20:01:23) Allwinner Technology
 
[      0.343]version: 1.1.0
[      0.428]pmbus:   ready
[      0.430]PMU: AXP221
[      0.432]PMU: AXP22x found
[      0.436]PMU: dcdc3 1200
[      0.439]PMU: pll1 1008 Mhz,PLL6=600 Mhz
AXI=336 Mhz,AHB=200 Mhz, APB1=100 Mhz
set power on vol to default
dcdc1_vol = 3000
dcdc2_vol = 1100
dcdc3_vol = 1200
dcdc4_vol = 0
dcdc5_vol = 1500
aldo2_vol = 2500
aldo3_vol = 3000
dldo1_vol = 3300
dldo2_vol = 3300
eldo1_vol = 3300
eldo2_vol = 3300
find power_sply to end
only battery exist, limit to dc
fel key old mode
run key detect
no key found
no key input
dram_para_set start
dram_para_set end
[      0.494]DRAM:  512 MiB
relocation Offset is: 15b11000
[PWM]backlight_bright=150,period_ns=20000,duty_ns=11718
smcl's set manager is NULL
workmode = 0
MMC:     2
[      0.697][mmc]: mmc driver ver 2014-07-15 17:16:00
[      0.702][mmc]: get sdc_2xmode ok, val = 1
[      0.706][mmc]: get sdc_f_max fail,use default sdc_f_max 50000000
[      0.712][mmc]: get card_line ok, card_line = 4
[      0.717][mmc]: get sdc_ex_dly_used fail,use default dly
[      0.722][mmc]: SUNXI SD/MMC: 2
[      0.726][mmc]: mmc 2 2xmode config clk
[      0.739][mmc]: ************Try SD card 2************
[      0.744][mmc]: mmc 2 cmd 8 timeout, err 100
[      0.749][mmc]: smc 2 err, cmd 8,  RTO
[      0.754][mmc]: mmc 2 mmc cmd 8 err 0x00000100
[      0.758][mmc]: mmc send if cond failed
[      0.762][mmc]: mmc 2 cmd 55 timeout, err 100
[      0.766][mmc]: smc 2 err, cmd 55,  RTO
[      0.772][mmc]: mmc 2 mmc cmd 55 err 0x00000100
[      0.776][mmc]: send app cmd failed
[      0.779][mmc]: ************Try MMC card 2************
LCD_panel_init
[      1.065][mmc]: mmc 2 2xmode config clk
[      1.079][mmc]: mmc 2 2xmode config clk
[      1.089][mmc]: mmc 2 2xmode config clk
[      1.098][mmc]: MID 000090 PSN 1932c44b
[      1.101][mmc]: PNM H4G2a -- 0x48-34-47-32-61-11
[      1.106][mmc]: PRV 0.1
[      1.109][mmc]: MDT m-8 y-2018
[      1.112][mmc]: MMC ver 4.5
[      1.115][mmc]: ---------------mmc->clock 50000000-----------
[      1.120][mmc]: ---------------mmc->bus_width 4--------------
[      1.126][mmc]: SD/MMC Card: 4bit, capacity: 3728MB
[      1.131][mmc]: boot0 capacity: 4000KB,boot1 capacity: 4000KB
[      1.137][mmc]: ************SD/MMC 2 init OK!!!************
[      1.144]sunxi flash init ok
In:    serial
Out:   serial
Err:   serial
--------fastboot partitions--------
-total partitions:7-
-name-        -start-       -size-
boot-res    : 1000000       1000000
env         : 2000000       1000000
boot        : 3000000       1000000
rootfs      : 4000000       20000000
data        : 24000000      1000000
sdcard      : 25000000      c0000000
UDISK       : e5000000      0
-----------------------------------
base bootcmd=run setargs_nand boot_normal
bootcmd set setargs_mmc
key 0
recovery key high 5, low 3
cant find fstbt value
no misc partition is found
misc_message->command = 0
to be run cmd=run setargs_mmc boot_normal
mount part name boot-res
cant open script.bin, maybe it is not exist
WORK_MODE_BOOT
board_status_probe
[      1.232]key trigger
sunxi_bmp_logo_display
[      1.250]Hit any key to stop autoboot:  0
bootcmd:run setargs_mmc boot_normal
mmc_pnm:PNM H4G2a
SanDisk EMMC is not detect!
--power_sply--
dcdc1_vol
read boot or recovery all
[      3.532]sunxi flash read :offset 3000000, 13887093 bytes OK
no signature
[      3.543]ready to boot
para err in disp_ioctl, cmd = 0xa,screen id = 1
[      3.552][mmc]: mmc exit start
[      3.556][mmc]: mmc 2 2xmode config clk
[      3.565][mmc]: mmc 2 2xmode config clk
[      3.579][mmc]: mmc 2 cmd 8 timeout, err 100
[      3.585][mmc]: smc 2 err, cmd 8,  RTO
[      3.591][mmc]: mmc 2 mmc cmd 8 err 0x00000100
[      3.595][mmc]: mmc send if cond failed
[      3.599][mmc]: mmc 2 cmd 55 timeout, err 100
[      3.605][mmc]: smc 2 err, cmd 55,  RTO
[      3.611][mmc]: mmc 2 mmc cmd 55 err 0x00000100
[      3.615][mmc]: send app cmd failed
[      3.628][mmc]: mmc 2 exit ok
[      3.631]
Starting kernel ...
 
<4[    0.755713] this module is used not!
[    0.908200] Bluetooth: get ap6xxx ap6xxx_bt_wake gpio failed
[    0.908206]
[    0.916164] Bluetooth: get ap6xxx ap6xxx_bt_host_wake gpio failed
[    0.916171]
[    0.961970] otg_wakelock_init: No USB transceiver found
[    0.967848] ths_fetch_sysconfig_para: type err  device_used = 1.
[    0.975445] fetch C0_LV_count from sysconfig failed
--------------------------------------------------------
--------------------- profile --------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
--------------------------------------------------------
Init display
Init keyboard
Init camera
Init temp sensor
Init led
Init rtc
Init io
2018/02/11-01:00:01
[root@dragonboard ]# Firmware Version:2
ParasResume
ImgsMngInit
mount success!
Sd card is mounted
/work/sh/init_usb.sh /dev/mmcblk0p9
ImgsMngSyncPre
can not open /work/imgs/imgs_mng!
can not open /work/imgs/imgs_mng!
g_ImgsIndex:0,g_ImgsNull:1
mount success!
/work/cali/ir_cali_data is not access,create it
unmount sucess!
Cali data is exist but invalid,clear it
Init offset:0
Init point0@0:(0,0)
Init point1@0:(0,0)
Init point2@0:(0,0)
Init point3@0:(0,0)
Init point4@0:(0,0)
Init point5@0:(0,0)
Init point6@0:(0,0)
Init point7@0:(0,0)
open /dev/io_func ok!
Got 1 camera devices.
Press Control-C to exit...
camera thread is running
Model: 1
ModelNumber: 2406
Manufacture Date: 1/24/2019 1:05:26 PM
SerialNumber: 2417Z2C4CD95
Width: 206
Height: 156
FirmwareVersion: 13.8.1.17
SDK version: 2.10.0.0
LIB version: 2.5.3.12
THERM version: 4
seek thread is running
Temp-3:85.0
MsgId:31
WM_HBKWIN:1
MsgId:15
intensity:1
lcd brightness:60%
Temp-2:26.1
Set ambient inter:4.6,exter:26.1
Temp-1:26.1
Начиная со строки "--------------------- profile --------------------------" - это уже пошел запуск скрипта самой программы тепловизора.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2019, 15:42
Ответы с готовыми решениями:

Добавить секцию кода в исполняемый файл. Редактирование PE заголовка
Ребят, я уже не знаю что с ним сделать. Мне надо свой код добавить в чужой ехе-шник, а места не хватает, надо расширить секцию кода,...

Как добавить секцию в самое начало документа ?
Dim session As New NotesSession Dim rtitem As NotesRichTextItem Set rtitem=doc.GetFirstItem(&quot;Body&quot;) Dim richStyle As...

Как добавить дополнительную ось на график
Мне нужно создать график в C++ Builder следующего вида см. вложение. Нужно к моему графику созданному в C++ Builder с помощью...

3
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
17.08.2019, 17:14
Примерно в таком духе : PE-файл в виде COM-файла
Т.е. разобрать и уяснить значение каждого поля в заголовке ELF все равно ведь придется.
1
0 / 0 / 0
Регистрация: 16.08.2019
Сообщений: 2
17.08.2019, 19:28  [ТС]
Разбирался, там их вроде не так уж и много. Ставил нужные значения флагам. Не работает
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
10.09.2019, 22:10
В основной сегмент нельзя добавить дополнительный код? И подправить в заголовке размер, а также смещение других сегментов при необходимости.
Может, конечно, просто физической памяти не хватить. :\
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2019, 22:10
Помогаю со студенческими работами здесь

Как правильно добавить дополнительную оперативку?
Было 2 гига. Установил windows 10, 64 битная. Купил еще планку на 2 гига. Как ее теперь правильно установить, чтоб комп полноценно ее...

Как добавить дополнительную запись в компонент ComboBox?
Короче такая проблема.. Создаю базу данных. возникла такая ситуация, нужно в компонент ComboBox добавить запись с помощью кнопки. как это...

Как добавить модули в исполняемый файл?
Всем привет :) Я написал одну интересную графическую (с окнами) программу под MS-DOS в среде Turbo Pascal 7.1. Мне нужна помощь. Как...

Как добавить файлы в исполняемый файл?
Есть 165 txt файлов. Как эти все файлы запихнуть в один exe'шник программы.

Как добавить OpenAL.dll в исполняемый файл?
Хочу вшить файл OpenAL32.dll в исполняемый файл .exe, подключаю библиотеку через: //OpenAL #pragma comment(lib, &quot;C:\\Program...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru