2 * Wine debugger - loading a module for debug purposes
4 * Copyright 2006 Eric Pouech
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #define NONAMELESSUNION
22 #define NONAMELESSSTRUCT
32 #include "wine/debug.h"
34 WINE_DEFAULT_DEBUG_CHANNEL(winedbg
);
36 static struct be_process_io be_process_module_io
;
38 static BOOL WINAPI
tgt_process_module_read(HANDLE hProcess
, const void* addr
,
39 void* buffer
, SIZE_T len
, SIZE_T
* rlen
)
44 static BOOL WINAPI
tgt_process_module_write(HANDLE hProcess
, void* addr
,
45 const void* buffer
, SIZE_T len
, SIZE_T
* wlen
)
50 enum dbg_start
tgt_module_load(const char* name
, BOOL keep
)
52 DWORD opts
= SymGetOptions();
53 HANDLE hDummy
= (HANDLE
)0x87654321;
54 enum dbg_start ret
= start_ok
;
56 SymSetOptions((opts
& ~(SYMOPT_UNDNAME
|SYMOPT_DEFERRED_LOADS
)) |
57 SYMOPT_LOAD_LINES
| SYMOPT_AUTO_PUBLICS
| 0x40000000);
58 if (!SymInitialize(hDummy
, NULL
, FALSE
))
59 return start_error_init
;
60 if (!SymLoadModule(hDummy
, NULL
, name
, NULL
, 0, 0))
62 ret
= start_error_init
;
68 dbg_printf("Non supported mode... errors may occur\n"
69 "Use at your own risks\n");
70 SymSetOptions(SymGetOptions() | 0x40000000);
71 dbg_curr_process
= dbg_add_process(&be_process_module_io
, 1, hDummy
);
73 dbg_curr_thread
= dbg_add_thread(dbg_curr_process
, 2, NULL
, NULL
);
75 /* FIXME: missing thread creation, fetching frames, restoring dbghelp's options... */
86 static BOOL
tgt_process_module_close_process(struct dbg_process
* pcs
, BOOL kill
)
88 SymCleanup(pcs
->handle
);
93 static BOOL WINAPI
tgt_process_module_get_selector(HANDLE hThread
, DWORD sel
, LDT_ENTRY
* le
)
98 static struct be_process_io be_process_module_io
=
100 tgt_process_module_close_process
,
101 tgt_process_module_read
,
102 tgt_process_module_write
,
103 tgt_process_module_get_selector
,