Wireshark-dev: Re: [Wireshark-dev] GDB / Fuzz test ?
From: Peter Wu <peter@xxxxxxxxxxxxx>
Date: Mon, 12 Nov 2018 11:31:49 +0100
On Mon, Nov 12, 2018 at 11:26:54AM +0100, Peter Wu wrote: > On Mon, Nov 12, 2018 at 10:27:32AM +0100, Dario Lombardo wrote: > > > 1. I'm not familiar with GDB and could not set a breakpoint in my > > > functions. Is there a trick to it? How do you run it? > > > > What's exactly your issue? When I run > > > > gdb --args run/wireshark > > break filename.c:xxx > > > > I'm asked if I want to set a breakpoint for dynamically loaded library > > (that's the case for dissectors, that live in libwireshark.so). > > You won't be asked once the libraries are asked. For that you could > "start" the program first (which will load all libraries and stop at the > main function), set the breakpoints and continue. You could either enter > the commands directly in the gdb shell, or use the `-ex "command"` > option to execute "command" directly. Optionally you can use the `-q` > option to hide the long license prompt: > > gdb -q -ex start -ex 'b your_function' -ex c > > Further documentation about breakpoints: > https://sourceware.org/gdb/onlinedocs/gdb/Set-Breaks.html > Documentation about "run" and "start": > https://sourceware.org/gdb/onlinedocs/gdb/Starting.html > > Additionally, if you rebuild your binaries without restarting GDB, you > might have to reload the debugging information for the executable and > libraries. Run the "file" command first before restarting the program > with "run" (shorthand: "r"): > > file run/wireshark > r > > > > And a small note: > > > The documentation indicates that you should run `./wireshark` to run the > > > compiled version, whereas it really should be `./run/wireshark`. Same goes > > > for the fuzz-test.sh. > > > > > > https://www.wireshark.org/docs/wsdg_html_chunked/ChSrcRunFirstTime.html#ChSrcRunFirstTimeUnix > > > Not a big deal, but that was the only non-smooth part of the compilation > > > process :) > > > > > > > Ok, I'll take them from here. > > Thomas, if you spot possible improvements for the WSDG, feel free to Oops, I meant "Antoine", sorry for the mixup :p > send a patch for it. The sources are located in docbook/wsdg_src, it can > be built with: > > ninja developer_guides > > and the result will be located in your build directory at > > docbook/wsdg_html_chunked/ > > I have not used fuzz-test.sh yet, so I cannot comment on that. Usually > however you should probably build with some sanitizers enabled: > > cmake -DENABLE_ASAN=1 -DENABLE_UBSAN=1 > > Sanitizers are developed in the LLVM/Clang source tree, so instead of > GCC you could optionally use Clang: > > -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ > > While running programs, you could set an extra environment variable to > disable memory leak reporting if you are only interested in preventing > crashes. Additionally, set a variable to make some memory allocators > directly use malloc/free such that the ASAN can carefully track every > allocation: > > export ASAN_OPTIONS=detect_leaks=0:abort_on_error=1 > export WIRESHARK_DEBUG_WMEM_OVERRIDE=simple G_SLICE=always-malloc > > ASAN_OPTIONS is a colon-separated list of options, more can be shown > with the option ASAN_OPTIONS=help=1. abort_on_error=1 is optional, but > recommended if you run with GDB since you can examine the call stack on > errors (e.g. using the "bt" command for a stack trace). And for better stack traces in UBSAN, you can also set: export UBSAN_OPTIONS=print_stacktrace=1 If you are debugging a memory safety issue where the call stacks are truncated, you can make these traces more accurate (but slow the program significantly) with: ASAN_OPTIONS=...:fast_unwind_on_malloc=0 -- Kind regards, Peter Wu https://lekensteyn.nl
- References:
- [Wireshark-dev] GDB / Fuzz test ?
- From: Antoine d'Otreppe
- Re: [Wireshark-dev] GDB / Fuzz test ?
- From: Dario Lombardo
- Re: [Wireshark-dev] GDB / Fuzz test ?
- From: Peter Wu
- [Wireshark-dev] GDB / Fuzz test ?
- Prev by Date: Re: [Wireshark-dev] GDB / Fuzz test ?
- Next by Date: Re: [Wireshark-dev] GDB / Fuzz test ?
- Previous by thread: Re: [Wireshark-dev] GDB / Fuzz test ?
- Next by thread: Re: [Wireshark-dev] GDB / Fuzz test ?
- Index(es):