бинарный патч в C (вместо xxd) - PullRequest
0 голосов
/ 13 апреля 2020

Я писал сценарии оболочки (чтобы было проще в использовании), но на этот раз я хотел сделать это в C, и одна команда, которую я использовал чаще всего, это xxd -r, чтобы «исправить» двоичный файл file.

Пример:

echo "0000050: 2034" | xxd -r - my_binary_file

Мой вопрос: есть ли способ сделать что-то подобное в C?

(надеюсь, мой вопрос понятен)

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Ну, вы все равно можете использовать свою команду и вызывать ее в C коде, используя функцию system ().

system ("echo" 0000050: 2034 "| xxd -r - my_binary_file")

ПРИМЕЧАНИЕ: вы можете динамически построить указанную выше строку с именем файла и параметрами, используя функцию sprintf (), а затем передать ее системной функции (), как показано ниже.

#include <string.h>
#include <stdlib.h>

int main(){

    char acBuffer[512]; //Allocate as reuiquired only
    memset(acBuffer, 0x00, sizeof(acBuffer));

    sprintf(acBuffer, "echo \"%s\" | xxd -r - %s", "0000050: 2034", "YourBinaryFile");
    system(acBuffer); //You can check the return type if you want to

    return 0;
    }
0 голосов
/ 13 апреля 2020

Универсально, вы можете использовать fopen (с "w" на Unix и "wb" на Windows), fseek и fwrite .

Если вы предпочитаете стиль posix, open , seek и write .

На Win32 posix эквивалентами являются CreateFile , SetFilePointer и WriteFile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...