mirror of
https://github.com/ianlancetaylor/libbacktrace.git
synced 2026-04-04 08:29:07 +08:00
libbacktrace: support ASLR on Windows
Patch from Björn Schäpers. * pecoff.c: Include <windows.h> if available. (coff_add): On Windows call GetModuleHandle to get base address.
This commit is contained in:
24
pecoff.c
24
pecoff.c
@@ -39,6 +39,18 @@ POSSIBILITY OF SUCH DAMAGE. */
|
|||||||
#include "backtrace.h"
|
#include "backtrace.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
#ifndef WIN32_MEAN_AND_LEAN
|
||||||
|
#define WIN32_MEAN_AND_LEAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOMINMAX
|
||||||
|
#define NOMINMAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Coff file header. */
|
/* Coff file header. */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -610,6 +622,7 @@ coff_add (struct backtrace_state *state, int descriptor,
|
|||||||
int debug_view_valid;
|
int debug_view_valid;
|
||||||
int is_64;
|
int is_64;
|
||||||
uintptr_t image_base;
|
uintptr_t image_base;
|
||||||
|
uintptr_t base_address = 0;
|
||||||
struct dwarf_sections dwarf_sections;
|
struct dwarf_sections dwarf_sections;
|
||||||
|
|
||||||
*found_sym = 0;
|
*found_sym = 0;
|
||||||
@@ -856,7 +869,16 @@ coff_add (struct backtrace_state *state, int descriptor,
|
|||||||
+ (sections[i].offset - min_offset));
|
+ (sections[i].offset - min_offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!backtrace_dwarf_add (state, /* base_address */ 0, &dwarf_sections,
|
#ifdef HAVE_WINDOWS_H
|
||||||
|
{
|
||||||
|
uintptr_t module_handle;
|
||||||
|
|
||||||
|
module_handle = (uintptr_t) GetModuleHandle (NULL);
|
||||||
|
base_address = module_handle - image_base;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!backtrace_dwarf_add (state, base_address, &dwarf_sections,
|
||||||
0, /* FIXME: is_bigendian */
|
0, /* FIXME: is_bigendian */
|
||||||
NULL, /* altlink */
|
NULL, /* altlink */
|
||||||
error_callback, data, fileline_fn,
|
error_callback, data, fileline_fn,
|
||||||
|
|||||||
Reference in New Issue
Block a user