C / C++

C Library Path

1
$ echo '#include <sys/types.h>'' | gcc -E -x c - | grep '/types.h'
Copied!

Vangrind

1
$ valgrind --leak-check=full --track-origins=yes --leak-resolution=med ./a.out
Copied!

Return Address on Stack in Windows

An alternative way to get the nearest return address in current stack frame (besides _ReturnAddress and _AddressOfReturnAddress) without manually walking the stack:
retaddr.cpp
1
#include <intrin.h>
2
#include <windows.h>
3
#include <iostream>
4
#include <sstream>
5
#include <iomanip>
6
​
7
// https://github.com/mgeeky/ThreadStackSpoofer/blob/f67caea38a7acdb526eae3aac7c451a08edef6a9/ThreadStackSpoofer/header.h#L38-L45
8
template<class... Args>
9
void log(Args... args)
10
{
11
std::stringstream oss;
12
(oss << ... << args);
13
std::cout << oss.str() << std::endl;
14
}
15
​
16
// https://github.com/mgeeky/ThreadStackSpoofer/blob/f67caea38a7acdb526eae3aac7c451a08edef6a9/ThreadStackSpoofer/main.cpp#L13-L14
17
void addressOfReturnAddress() {
18
auto pRetAddr = (PULONG_PTR)_AddressOfReturnAddress(); // https://doxygen.reactos.org/d6/d8c/intrin__ppc_8h_source.html#l00040
19
log("Original return address via _AddressOfReturnAddress: 0x", std::hex, std::setw(8), std::setfill('0'), *pRetAddr);
20
}
21
​
22
// https://stackoverflow.com/a/1334586/6253579
23
void rtlCaptureStackBackTrace() {
24
typedef USHORT(WINAPI* CaptureStackBackTraceType)(__in ULONG, __in ULONG, __out PVOID*, __out_opt PULONG);
25
CaptureStackBackTraceType RtlCaptureStackBackTrace = (CaptureStackBackTraceType)(GetProcAddress(LoadLibrary("ntdll.dll"), "RtlCaptureStackBackTrace"));
26
​
27
void* callers[2] = { NULL };
28
int count = (RtlCaptureStackBackTrace)(1, 2, callers, NULL);
29
log("Original return address via RtlCaptureStackBackTrace: 0x", std::hex, std::setw(8), std::setfill('0'), (DWORD64)callers[0]);
30
}
31
​
32
int main(int argc, char** argv)
33
{
34
addressOfReturnAddress();
35
rtlCaptureStackBackTrace();
36
return 0;
37
}
Copied!