[rpm] sypie sie i nie kumam...

Jakub Bogusz qboosh w pld-linux.org
Pon, 29 Mar 2004, 12:22:04 CEST


On Mon, Mar 29, 2004 at 12:11:23PM +0200, Paweł Sikora wrote:
> mamy taki oto fragment kodu...
> 
> [rpm/lib/rpmrc.c]
> 
> static void defaultMachine(const char ** arch, const char ** os)
> {
>     static struct utsname un;
> 
> (...)

> printf("un.machine = %s, un.sysname = %s\n", un.machine, un.sysname);
> printf("arch_ptr = %08x, os_ptr = %08x\n", arch, os);
> printf("*arch = %08x\n", *arch);
> printf("*os = %08x\n", *os);

>     if (arch) *arch = un.machine;
>     if (os) *os = un.sysname;

> i fragment, ktory wysypuje program.
> 
> (
> [~/rpm/BUILD/rpm-4.3] # ./rpm
> call#2
> #x
> un.machine = i686, un.sysname = Linux
> arch_ptr = 756e6547, os_ptr = bfffe1f8
> Naruszenie ochrony pamięci
> )

arch jest wskaźnikiem na napis zaczynający się od "Genu", a nie
poprawny wskaźnik na cokolwiek.

Wygląda jakby parametr został uszkodzony przez jakieś cpuid - gdzieś
przy asm() jest niepełna lista zamazywanych rejestrów?
Albo problemy z kompilatorem.


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl