Re: [PATCH] scripts: add extract-vmlinux

From: Corentin Chary
Date: Thu Aug 11 2011 - 09:08:45 EST


On Thu, Aug 11, 2011 at 1:28 PM, Paul Bolle <pebolle@xxxxxxxxxx> wrote:
> On Thu, 2011-08-11 at 10:53 +0200, Corentin Chary wrote:
>> This script can be used to extract vmlinux from a compressed
>> kernel image (bzImage, etc..). It's inspired from (a subset of)
>> extract-ikconfig.
>
> This is more specific than what this scripts actually does, isn't it? At
> least when I tried to read this script my impression is that it does two
> things:
> - check whether the input file is a valid ELF file;
> - if not; try to find a compressed ELF file somewhere in the input file.
>
> There's no checking whether the input file is a kernel image and there's
> no checking whether the found ELF file actually is was a, well, vmlinux.
> Both checks are perhaps far from trivial. Anyhow, if that's correct this
> should be made more clear. Perhaps the script should even be called
> something like extract-elf.

Yep, I didn't found a quick way to check that the file is a valid
vmlinux and the function check_elf() has a configusing name.

Is that one better ?

check_vmlinux()
{
# Use readelf to check if it's a valid ELF
# TODO: find a better to way to check that it's really vmlinux
# and not just another elf
readelf -h $1 > /dev/null 2>&1 || return 1

cat $1
exit 0
}

If you have a good way to check that an elf is a valid vmlinux, I'd be
happy to implement it.

>> It's something a lot of people have been looking for (mainly
>> people with xen < 4 that doesn't support bzImages at all).
>>
>> Signed-off-by: Corentin Chary <corentin.chary@xxxxxxxxx>
>> [...]
>> +try_decompress()
>> +{
>> +   for   pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"`
>> + Â Â do
>> + Â Â Â Â Â Â pos=${pos%%:*}
>> + Â Â Â Â Â Â tail -c+$pos "$img" | $3 > $tmp 2> /dev/null
>
> Perhaps a few comments on the above lines would be nice. Without those
> comments I must guess you're finding compressed data somewhere in the
> input file. It also seems you're looping through the entire input file.
> Or are (sequences of) commands like the above considered obvious?

It's copied from extract-ikconfig, there was no comment in it, so I
assumed it's obvious.
Basically it uses brute force (tm) to find well known headers and try
to decompress from here.

>> + Â Â Â Â Â Â check_elf $tmp
>> + Â Â done
>> +}
>> +
>> [...]
>> +# Initial attempt for uncompressed images or objects:
>> +check_elf $img
>> +
>> +# That didn't work, so retry after decompression.
>> +try_decompress '\037\213\010' xy  Âgunzip
>> +try_decompress '\3757zXZ\000' abcde unxz
>> +try_decompress 'BZh'     Âxy  Âbunzip2
>> +try_decompress '\135\0\0\0'  xxx  unlzma
>> +try_decompress '\211\114\132' xy  Â'lzop -d'
>
> Perhaps you could first test whether these commands are available before
> running try_decompress() with them?

Same as before, if it's ok for extract-ikconfig not to check the
command, then it's ok for me.
If it's not, then we should patch both.

Personnaly I think that the script is small enought so that someone
who try to use it and can't make it work will understand what's
happening.

Note that extract-ikconfig is used in the build system and is far more
"critical" that extract-vmlinux, and nobody complained before :).

--
Corentin Chary
http://xf.iksaif.net
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/