AndyBig 5 1 августа, 2019 Опубликовано 1 августа, 2019 · Жалоба Ковыряю дизассемблером исполняемую программу из недорогого тепловизора HT-1A. Производитель сильно облегчил это дело, оставив всю отладочную информацию в программе :) Ковыряю для того, чтобы немного улучшить и изменить интерфейс. И столкнулся с тем, что в некоторых моментах мне нужно не просто изменить байты в теле программы, а добавить их. Естественно, просто вставить их нельзя - полетят к чертям все ссылки на код и данные. Поэтому пришла мне в голову мысль добавить в конец файла килобайт 10, добавить в таблицу заголовков программы еще один, загружаемый в из этих 10 кб, и в этих 10 кб уже дописывать какие-то свои моменты, при необходимости прыгая на них из оригинального кода. Можно ли это сделать и если можно, то как? Что-то все мои попытки приводят к неработоспособности файла. Пока я пытался изменить заголовок NOTE на LOAD, пытаясь загрузить небольшой кусок этого файла в память по адресу, следующему за последним используемым программой :( Пока я не назначаю ему тип LOAD и не определяю адреса загрузки - файл работает, даже если я меняю его на NULL. То есть сам этот заголовок NOTE файлу для работы не нужен, как и секции, определенный в его адресах - .note.ABI-tag и .note.gnu.build-id При запуске измененного файла ОС тепловизора просто выдает сообщение Killed без подробностей. Системные логи, насколько я понял, не ведутся. [root@dragonboard ]# /work/app/ht-a1 -v 2 Killed [root@dragonboard ]# Система основана на Busybox v1.22.1. Вот лог загрузки, если это может помочь: Spoiler 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 --------------------------" - это уже пошел запуск скрипта самой программы тепловизора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey87 0 19 октября, 2019 Опубликовано 19 октября, 2019 · Жалоба On 8/1/2019 at 8:15 PM, AndyBig said: добавить в конец файла килобайт 10, добавить в таблицу заголовков программы еще один, загружаемый в из этих 10 кб, и в этих 10 кб уже дописывать какие-то свои моменты, при необходимости прыгая на них из оригинального кода. Здравствуйте, возможно это вам поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ruslan21083i 0 22 июня, 2022 Опубликовано 22 июня, 2022 (изменено) · Жалоба Я бы оставил оригинальный исполняемый файл без изменений, а попробовал бы загрузить его из своей программы в память и там пропатчить нужные места и далее передать ему управление https://stackoverflow.com/questions/39486061/load-elf-file-into-memory Изменено 22 июня, 2022 пользователем ruslan21083i Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться