LINUX.ORG.RU

вопрос гурам по gcc :))


0

0

Доброго денька всем. Вобщем для теста сетевой приклады надран файл захваченных пакетов по опр. правилам. Этот файл имеет известный формат для нас. Хочется - вкомпилить этот бинарник в программу и чтоб была известна "точка входа" и его размер. Возможно или нет, подскажите плз

★★

Возможно. Конвертишь его в текстовый вид типа:
0x55, 0x14, 0x88, ...
потом подцепляешь этот файл инклюдом:
u8 data[] = {
#include "dile.dat"
};

Ну и всё.

anonymous
()

Для подобных целей у меня для SCons есть python-функция:

_fntable = [ chr(i) for i in xrange(256) ]
_fntable[ ord("/") ] = "_"
_fntable[ ord(".") ] = "_"
_fntable = "".join(_fntable)

def igrouper( iterable, n=4 ) :
    acc = []
    for i in iterable :
        acc.append( "0x%02x" % ord(i) )
        if len(acc) == n :
            yield ", ".join(acc)
            acc = []
    if len(acc) :
        yield ", ".join(acc)

def any2h( target, source, env, n=12 ) :
    """ Generate h-file declaring an array with contents of any file.
    """
    for t,s in zip( target, source ) :
        varName = s.name.translate( _fntable )
        ft = file( t.path, "w+" )
        ft.write( "unsigned char %s[] = {\n  " % (varName,) )
        fc = file( s.path, "rb" ).read()
        ft.write( ",\n  ".join( list(igrouper( fc, n )) ) )
        ft.write( "\n};\nunsigned int %s = %d;\n" % ( varName+"_len", len(fc) ) )
        ft.close()

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

Проще сгенерить сразу ассемблер:

(echo mylabel:;od -tx1 ../xxx.py | sed -e 's/ /,0x/g' -e s/^[^,]*,/.byte /' -e '$d';echo endlabel:) > zzz.s


$ gcc -c zzz.s
$ nm zzz.o
0000001f t endlabel
00000000 t mylabel

io ★★
()
Ответ на: комментарий от watashiwa_daredeska

#!/usr/bin/perl -w
use strict;

my $bin = $ARGV[0];
unless ($bin) {
        $_ = $0;
        s#^.*/(.*)$#$1#;
        die "Usage: $_ file.rbf\n";
};

my $dat = $bin;
$dat =~ s/\.([^.]*$)/.dat/g;

open FI, $bin;
open FO, ">", $dat;
my $c;
my $i = 0;
while (read FI, $c, 1) {
  print FO "\n" unless ($i % 16 || !$i);
  printf FO "0x%02X, ", ord($c);
  $i++;
}
print FO "\n";
close FI;
close FO;

anonymous
()
Ответ на: комментарий от anonymous

Спасибо всем господа за помощь! Вот за что люблю ЛОР - тут отвечают деловито и в исходниках, так и целый проект слепить не долго :))))

PETER ★★
() автор топика

мне рассказывали что праведника в раю будут облажать 40 гуров. Это правда?

dilmah ★★★★★
()

а причем тут гидроусилители руля? o_O

cobold ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.