Вы можете определить точку выхода malloc и поставить там условную точку останова.Например:
(gdb) tbreak main
Breakpoint 1 at 0x4005c4: file t.c, line 13.
(gdb) r
Starting program: /var/tmp/a.out
main () at t.c:13
13 foo = malloc (64);
(gdb) br *__libc_malloc+211 if $rax==0
Breakpoint 2 at 0x7f26d143ea93
(gdb) n
14 foo = malloc (GIGABYTE*64);
(gdb) p foo
$1 = (void *) 0x21dc010
(gdb) n
Breakpoint 2, 0x00007f26d143ea93 in malloc () from /lib/libc.so.6
Обратите внимание, я добавил вызов malloc
, который выполняется первым, чтобы проиллюстрировать, что точка останова срабатывает только для возвращаемого значения NULL
.Адрес точки останова может варьироваться в зависимости от версии libc, я нашел ее, пройдя по malloc
с помощью nexti
, пока не нажму инструкцию ret
.