#LinuxGER

Netscape, SIGBUS und ich ;)

forcer (forcer@mindless.com)
Thu, 12 Feb 1998 10:20:50 +0100

Date: Thu, 12 Feb 1998 10:20:50 +0100
From: forcer <forcer@mindless.com>
Message-Id: <199802120920.KAA09514@mindless.com>
To: Linux-GER@Infodrom.North.DE
Subject: Netscape, SIGBUS und ich ;)

Nachdem mir Netscape jetzt zum fuenften mal bei einer website nach fast
vollstaendigem laden abgeratzt ist, hab ich mich entschlossen, da mal was zu
tun.
Der verantwortliche fuer die "Bus error" ist SIGBUS.
signal(7):
SIGBUS 10,7,10 AG Bus error
Also, default behaviour "abort process", und kein POSIX conformant signal.
Auf x86er wird diese signal AFAIK durch einen non-aligned memory access
ausgeloest, wenn das passende flag gesetzt ist. Da dies allerdings nur
zu debugging zwecken sinnvoll ist (die x86er koennen an alle speicheroffsets
zugreifen, nur an geraden "besonders" schnell), sollte es relativ sicher
sein, dieses signal zu ignorieren.
Dass es ueberhaupt raised' wird ist wohl ein bug im Netscape.

forcer@mynock:~$ cat `which netscape`
#!/bin/sh
exec /home/forcer/bin/nobus /opt/netscape/netscape
forcer@mynock:~$

nobus hab ich selber geschrieben (ja, ich weiss, mordsmaessige tat ;)
Fuer alle, die sich auch von Bus error genervt fuehlen, aber keine C
kenntnisse haben...

forcer@mynock:~$ cat programming/c/forcer/nobus.c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int main(int argc, char **argv){
if(argc == 1){
printf("Usage: %s <program> [program args]\n", argv[0]);
}else{
if(signal(SIGBUS, SIG_IGN)==SIG_ERR)
puts("Couldn't catch SIGBUS");
else{
execvp(argv[1], argv+1);
perror(argv[1]);
}
}
return 0;
}

forcer@mynock:~$
MfG,
-forcer

--
/* Never make any mistaeks.                                               */
/* email: forcer@mindless.com.skip -><- www: http://www.forcer.base.org/  */
/* IRC: forcer (IRCnet @#StarWars) -><- 2048/191585A9 1997/11/29 forcer   */


This archive was generated by hypermail 1.02.