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
;
58 SymSetOptions((opts
& ~(SYMOPT_UNDNAME
|SYMOPT_DEFERRED_LOADS
)) |
59 SYMOPT_LOAD_LINES
| SYMOPT_AUTO_PUBLICS
| 0x40000000);
60 if (!dbg_init(hDummy
, NULL
, FALSE
))
61 return start_error_init
;
62 len
= MultiByteToWideChar(CP_ACP
, 0, name
, -1, NULL
, 0);
63 nameW
= HeapAlloc(GetProcessHeap(), 0, len
* sizeof(WCHAR
));
66 ret
= start_error_init
;
71 len
= MultiByteToWideChar(CP_ACP
, 0, name
, -1, nameW
, len
);
72 if (!dbg_load_module(hDummy
, NULL
, nameW
, 0, 0))
74 ret
= start_error_init
;
77 HeapFree(GetProcessHeap(), 0, nameW
);
82 dbg_printf("Non supported mode... errors may occur\n"
83 "Use at your own risks\n");
84 SymSetOptions(SymGetOptions() | 0x40000000);
85 dbg_curr_process
= dbg_add_process(&be_process_module_io
, 1, hDummy
);
87 dbg_curr_thread
= dbg_add_thread(dbg_curr_process
, 2, NULL
, NULL
);
89 /* FIXME: missing thread creation, fetching frames, restoring dbghelp's options... */
100 static BOOL
tgt_process_module_close_process(struct dbg_process
* pcs
, BOOL kill
)
102 SymCleanup(pcs
->handle
);
103 dbg_del_process(pcs
);
107 static BOOL WINAPI
tgt_process_module_get_selector(HANDLE hThread
, DWORD sel
, LDT_ENTRY
* le
)
112 static struct be_process_io be_process_module_io
=
114 tgt_process_module_close_process
,
115 tgt_process_module_read
,
116 tgt_process_module_write
,
117 tgt_process_module_get_selector
,