Os dados estão lá (pelo menos até 999 entradas, totalizando pelo menos 6885 bytes de blahs numeradas):
> cat segfault.c
int main(int argc, char *argv[])
{
char *s = "hello world";
*s = 'H';
}
> cc -g -o segfault segfault.c
> limit coredumpsize 9999999
> ./segfault 'perl -le 'print "blah$_" for 1..999''
Segmentation fault (core dumped)
> strings core.12231 | grep -c blah
1000
Depois, com uma rápida mudança de gdb
, e assumindo os símbolos de depuração, isso pode ser recuperado por meio de algo como:
> gdb ./segfault core.12231
...
(gdb) p argc
$1 = 1000
(gdb) x/1000s *argv
...
Outra opção seria usar um invólucro de shell simples que registre "$@"
em algum lugar, em seguida, exec
s o programa adequado com os argumentos fornecidos.