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
29 static struct be_process_io be_process_module_io
;
31 static BOOL
tgt_process_module_read(HANDLE hProcess
, const void* addr
,
32 void* buffer
, SIZE_T len
, SIZE_T
* rlen
)
37 static BOOL
tgt_process_module_write(HANDLE hProcess
, void* addr
,
38 const void* buffer
, SIZE_T len
, SIZE_T
* wlen
)
43 enum dbg_start
tgt_module_load(const char* name
, BOOL keep
)
45 DWORD opts
= SymGetOptions();
47 HANDLE hDummy
= (HANDLE
)0x87654321;
48 enum dbg_start ret
= start_ok
;
52 SymSetOptions((opts
& ~(SYMOPT_UNDNAME
|SYMOPT_DEFERRED_LOADS
)) |
53 SYMOPT_LOAD_LINES
| SYMOPT_AUTO_PUBLICS
);
54 native
= SymSetExtendedOption(SYMOPT_EX_WINE_NATIVE_MODULES
, TRUE
);
55 if (!dbg_init(hDummy
, NULL
, FALSE
))
56 return start_error_init
;
57 len
= MultiByteToWideChar(CP_ACP
, 0, name
, -1, NULL
, 0);
58 nameW
= malloc(len
* sizeof(WCHAR
));
61 ret
= start_error_init
;
66 len
= MultiByteToWideChar(CP_ACP
, 0, name
, -1, nameW
, len
);
67 if (!dbg_load_module(hDummy
, NULL
, nameW
, 0, 0))
69 ret
= start_error_init
;
77 dbg_printf("Non supported mode... errors may occur\n"
78 "Use at your own risks\n");
79 SymSetExtendedOption(SYMOPT_EX_WINE_NATIVE_MODULES
, TRUE
);
80 dbg_curr_process
= dbg_add_process(&be_process_module_io
, 1, hDummy
);
82 dbg_curr_thread
= dbg_add_thread(dbg_curr_process
, 2, NULL
, NULL
);
84 /* FIXME: missing thread creation, fetching frames, restoring dbghelp's options... */
90 SymSetExtendedOption(SYMOPT_EX_WINE_NATIVE_MODULES
, native
);
96 static BOOL
tgt_process_module_close_process(struct dbg_process
* pcs
, BOOL kill
)
98 SymCleanup(pcs
->handle
);
103 static BOOL
tgt_process_module_get_selector(HANDLE hThread
, DWORD sel
, LDT_ENTRY
* le
)
108 static struct be_process_io be_process_module_io
=
110 tgt_process_module_close_process
,
111 tgt_process_module_read
,
112 tgt_process_module_write
,
113 tgt_process_module_get_selector
,