Skip to content

Commit b6418f4

Browse files
committed
Add MSVC Makefiles
1 parent 06cee12 commit b6418f4

File tree

14 files changed

+259
-2
lines changed

14 files changed

+259
-2
lines changed

MSVC.mk

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
!IF "$(PLATFORM)" == "x86"
2+
OBJSUFFIX=.obj32
3+
LIBSUFFIX=.lib
4+
DLLSUFFIX=.dll
5+
IDALIB=x86_win_vc_32\ida.lib
6+
IDACXXFLAGS=/D__X86__
7+
GCCLIKECFLAGS=/D__i386
8+
!ELSEIF "$(PLATFORM)" == "x64"
9+
OBJSUFFIX=.obj64
10+
LIBSUFFIX=64.lib
11+
DLLSUFFIX=64.dll
12+
IDALIB=x64_win_vc_64\ida.lib
13+
IDACXXFLAGS=/D__X64__ /D__EA64__
14+
GCCLIKECFLAGS=/D__x86_64
15+
!ELSE
16+
!ERROR Unsupported platform
17+
!ENDIF
18+
19+
CC=cl
20+
CXX=cl
21+
AR=lib
22+
LD=link
23+
LDFLAGS=/DEBUG
24+
RM=del
25+
COMMONCFLAGS=/O2 /Z7 /W3 $(GCCLIKECFLAGS)
26+
COMMONCXXFLAGS=$(COMMONCFLAGS) /EHsc

Makefile.MSVC

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
!include MSVC.mk
2+
3+
CXXFLAGS=$(COMMONCXXFLAGS) \
4+
$(IDACXXFLAGS) \
5+
/D__NT__ \
6+
/DUSE_STANDARD_FILE_FUNCTIONS \
7+
/I"$(IDASDK_PATH)"\include \
8+
/I"$(IDA_PATH)"\plugins\hexrays_sdk\include \
9+
/Ideps\libdwarf-helpers \
10+
/Ideps\libdwarf\libdwarf \
11+
/Ideps\libelf-helpers \
12+
/Ideps\libelf-0.8.13\lib
13+
14+
OBJECTS=src\dwarfexport$(OBJSUFFIX) \
15+
src\dwarfgen$(OBJSUFFIX) \
16+
src\platform$(OBJSUFFIX)
17+
18+
all: bin\dwarfexport$(DLLSUFFIX)
19+
20+
bin\dwarfexport$(DLLSUFFIX): $(OBJECTS) \
21+
deps\lib\libdwarf$(LIBSUFFIX) \
22+
deps\lib\libelf$(LIBSUFFIX)
23+
$(LD) /DLL $(LDFLAGS) /OUT:$@ $(OBJECTS) \
24+
deps\lib\libdwarf$(LIBSUFFIX) \
25+
deps\lib\libelf$(LIBSUFFIX) \
26+
"$(IDASDK_PATH)"\lib\$(IDALIB)
27+
28+
deps\lib\libdwarf$(LIBSUFFIX): deps\Makefile-libdwarf.MSVC
29+
cd deps
30+
$(MAKE) /f Makefile-libdwarf.MSVC
31+
cd ..
32+
33+
deps\lib\libelf$(LIBSUFFIX): deps\Makefile-libelf.MSVC
34+
cd deps
35+
$(MAKE) /f Makefile-libelf.MSVC
36+
cd ..
37+
38+
.cpp$(OBJSUFFIX):
39+
$(CXX) /c $(CXXFLAGS) /Fo:$@ $<
40+
41+
clean:
42+
$(RM) $(OBJECTS) bin\dwarfexport$(DLLSUFFIX)
43+
cd deps
44+
$(MAKE) /f Makefile-libdwarf.MSVC clean
45+
$(MAKE) /f Makefile-libelf.MSVC clean
46+
cd ..

README.md

100644100755
Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,30 @@ folder location respectively. Then build the plugin using `make`.
5353
Building On Windows
5454
-------------------
5555

56-
No instructions are currently provided. I'm using a series of hacks that I will
57-
clean up and document at some point.
56+
Windows build can be performed using MSVC Compiler (cl.exe) and NMAKE
57+
(nmake.exe). First, download and extract [libdwarf](
58+
https://sourceforge.net/p/libdwarf/code/ci/master/tree/) source code into
59+
`deps/libdwarf` and [libelf](
60+
https://fossies.org/linux/misc/old/libelf-0.8.13.tar.gz/) source code into
61+
`deps/libelf-0.8.13`. The commands below assume WSL/MinGW/Cygwin, but you can
62+
use any other method that you prefer.
63+
64+
```
65+
$ git clone git://git.code.sf.net/p/libdwarf/code deps/libdwarf
66+
$ (cd deps/libdwarf && git checkout 988618dc8be8)
67+
$ curl https://fossies.org/linux/misc/old/libelf-0.8.13.tar.gz | tar -C deps -xz
68+
```
69+
70+
Then, NMAKE can be invoked through x86 or x64 Native Tools Command Prompt for
71+
VS (depending on whether you need 32-bit or 64-bit plugin) as follows:
72+
73+
```
74+
dwarfexport> nmake /f Makefile.MSVC IDA_PATH="C:\Program Files\IDA 7.2" IDASDK_PATH="C:\Program Files\IDA 7.2\sdk"
75+
```
76+
77+
32-bit version will be placed into `bin\dwarfexport.dll`, 64-bit version will
78+
be placed into `bin\dwarfexport64.dll`.
79+
5880

5981
Building on macOS
6082
-----------------

deps/Makefile-libdwarf.MSVC

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
!include ..\MSVC.mk
2+
3+
CFLAGS=$(COMMONCFLAGS) /DHAVE_CONFIG_H /Ilibdwarf-helpers /Ilibdwarf/libdwarf
4+
5+
# Adapted by a simple search-and-replace from am_libdwarf_la_OBJECTS
6+
# variable in libdwarf\libdwarf\Makefile.in.
7+
OBJECTS=libdwarf\libdwarf\dwarf_abbrev$(OBJSUFFIX) \
8+
libdwarf\libdwarf\dwarf_alloc$(OBJSUFFIX) \
9+
libdwarf\libdwarf\dwarf_arange$(OBJSUFFIX) \
10+
libdwarf\libdwarf\dwarf_debuglink$(OBJSUFFIX) \
11+
libdwarf\libdwarf\dwarf_die_deliv$(OBJSUFFIX) \
12+
libdwarf\libdwarf\dwarf_dnames$(OBJSUFFIX) \
13+
libdwarf\libdwarf\dwarf_dsc$(OBJSUFFIX) \
14+
libdwarf\libdwarf\dwarf_elf_access$(OBJSUFFIX) \
15+
libdwarf\libdwarf\dwarf_elf_load_headers$(OBJSUFFIX) \
16+
libdwarf\libdwarf\dwarf_elfread$(OBJSUFFIX) \
17+
libdwarf\libdwarf\dwarf_elf_rel_detector$(OBJSUFFIX) \
18+
libdwarf\libdwarf\dwarf_error$(OBJSUFFIX) \
19+
libdwarf\libdwarf\dwarf_form$(OBJSUFFIX) \
20+
libdwarf\libdwarf\dwarf_frame$(OBJSUFFIX) \
21+
libdwarf\libdwarf\dwarf_frame2$(OBJSUFFIX) \
22+
libdwarf\libdwarf\dwarf_funcs$(OBJSUFFIX) \
23+
libdwarf\libdwarf\dwarf_gdbindex$(OBJSUFFIX) \
24+
libdwarf\libdwarf\dwarf_generic_init$(OBJSUFFIX) \
25+
libdwarf\libdwarf\dwarf_global$(OBJSUFFIX) \
26+
libdwarf\libdwarf\dwarf_groups$(OBJSUFFIX) \
27+
libdwarf\libdwarf\dwarf_harmless$(OBJSUFFIX) \
28+
libdwarf\libdwarf\dwarf_init_finish$(OBJSUFFIX) \
29+
libdwarf\libdwarf\dwarf_leb$(OBJSUFFIX) \
30+
libdwarf\libdwarf\dwarf_line$(OBJSUFFIX) \
31+
libdwarf\libdwarf\dwarf_loc$(OBJSUFFIX) \
32+
libdwarf\libdwarf\dwarf_machoread$(OBJSUFFIX) \
33+
libdwarf\libdwarf\dwarf_macro$(OBJSUFFIX) \
34+
libdwarf\libdwarf\dwarf_macro5$(OBJSUFFIX) \
35+
libdwarf\libdwarf\dwarf_names$(OBJSUFFIX) \
36+
libdwarf\libdwarf\dwarf_object_detector$(OBJSUFFIX) \
37+
libdwarf\libdwarf\dwarf_object_read_common$(OBJSUFFIX) \
38+
libdwarf\libdwarf\dwarf_original_elf_init$(OBJSUFFIX) \
39+
libdwarf\libdwarf\dwarf_peread$(OBJSUFFIX) \
40+
libdwarf\libdwarf\dwarf_print_lines$(OBJSUFFIX) \
41+
libdwarf\libdwarf\dwarf_pubtypes$(OBJSUFFIX) \
42+
libdwarf\libdwarf\dwarf_query$(OBJSUFFIX) \
43+
libdwarf\libdwarf\dwarf_ranges$(OBJSUFFIX) \
44+
libdwarf\libdwarf\dwarf_str_offsets$(OBJSUFFIX) \
45+
libdwarf\libdwarf\dwarfstring$(OBJSUFFIX) \
46+
libdwarf\libdwarf\dwarf_stringsection$(OBJSUFFIX) \
47+
libdwarf\libdwarf\dwarf_tied$(OBJSUFFIX) \
48+
libdwarf\libdwarf\dwarf_tsearchhash$(OBJSUFFIX) \
49+
libdwarf\libdwarf\dwarf_types$(OBJSUFFIX) \
50+
libdwarf\libdwarf\dwarf_util$(OBJSUFFIX) \
51+
libdwarf\libdwarf\dwarf_vars$(OBJSUFFIX) \
52+
libdwarf\libdwarf\dwarf_weaks$(OBJSUFFIX) \
53+
libdwarf\libdwarf\dwarf_xu_index$(OBJSUFFIX) \
54+
libdwarf\libdwarf\malloc_check$(OBJSUFFIX) \
55+
libdwarf\libdwarf\pro_alloc$(OBJSUFFIX) \
56+
libdwarf\libdwarf\pro_arange$(OBJSUFFIX) \
57+
libdwarf\libdwarf\pro_die$(OBJSUFFIX) \
58+
libdwarf\libdwarf\pro_dnames$(OBJSUFFIX) \
59+
libdwarf\libdwarf\pro_encode_nm$(OBJSUFFIX) \
60+
libdwarf\libdwarf\pro_error$(OBJSUFFIX) \
61+
libdwarf\libdwarf\pro_expr$(OBJSUFFIX) \
62+
libdwarf\libdwarf\pro_finish$(OBJSUFFIX) \
63+
libdwarf\libdwarf\pro_forms$(OBJSUFFIX) \
64+
libdwarf\libdwarf\pro_frame$(OBJSUFFIX) \
65+
libdwarf\libdwarf\pro_funcs$(OBJSUFFIX) \
66+
libdwarf\libdwarf\pro_init$(OBJSUFFIX) \
67+
libdwarf\libdwarf\pro_line$(OBJSUFFIX) \
68+
libdwarf\libdwarf\pro_log_extra_flag_strings$(OBJSUFFIX) \
69+
libdwarf\libdwarf\pro_macinfo$(OBJSUFFIX) \
70+
libdwarf\libdwarf\pro_pubnames$(OBJSUFFIX) \
71+
libdwarf\libdwarf\pro_reloc$(OBJSUFFIX) \
72+
libdwarf\libdwarf\pro_reloc_stream$(OBJSUFFIX) \
73+
libdwarf\libdwarf\pro_reloc_symbolic$(OBJSUFFIX) \
74+
libdwarf\libdwarf\pro_section$(OBJSUFFIX) \
75+
libdwarf\libdwarf\pro_types$(OBJSUFFIX) \
76+
libdwarf\libdwarf\pro_vars$(OBJSUFFIX) \
77+
libdwarf\libdwarf\pro_weaks$(OBJSUFFIX)
78+
79+
lib\libdwarf$(LIBSUFFIX): $(OBJECTS)
80+
$(AR) -OUT:$@ $(OBJECTS)
81+
82+
.c$(OBJSUFFIX):
83+
$(CC) /c $(CFLAGS) /Fo:$@ $<
84+
85+
clean:
86+
$(RM) $(OBJECTS) lib\libdwarf$(LIBSUFFIX)

deps/Makefile-libelf.MSVC

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
!include ..\MSVC.mk
2+
3+
CFLAGS=$(COMMONCFLAGS) /DHAVE_CONFIG_H /Ilibelf-helpers /Ilibelf-0.8.13\lib
4+
5+
# Adapted by a simple search-and-replace from SRCS*
6+
# variables in libelf-0.8.13\lib.
7+
OBJECTS=libelf-0.8.13\lib\begin$(OBJSUFFIX) \
8+
libelf-0.8.13\lib\cntl$(OBJSUFFIX) \
9+
libelf-0.8.13\lib\end$(OBJSUFFIX) \
10+
libelf-0.8.13\lib\errmsg$(OBJSUFFIX) \
11+
libelf-0.8.13\lib\errno$(OBJSUFFIX) \
12+
libelf-0.8.13\lib\fill$(OBJSUFFIX) \
13+
libelf-0.8.13\lib\flag$(OBJSUFFIX) \
14+
libelf-0.8.13\lib\getarhdr$(OBJSUFFIX) \
15+
libelf-0.8.13\lib\getarsym$(OBJSUFFIX) \
16+
libelf-0.8.13\lib\getbase$(OBJSUFFIX) \
17+
libelf-0.8.13\lib\getdata$(OBJSUFFIX) \
18+
libelf-0.8.13\lib\getident$(OBJSUFFIX) \
19+
libelf-0.8.13\lib\getscn$(OBJSUFFIX) \
20+
libelf-0.8.13\lib\hash$(OBJSUFFIX) \
21+
libelf-0.8.13\lib\kind$(OBJSUFFIX) \
22+
libelf-0.8.13\lib\ndxscn$(OBJSUFFIX) \
23+
libelf-0.8.13\lib\newdata$(OBJSUFFIX) \
24+
libelf-0.8.13\lib\newscn$(OBJSUFFIX) \
25+
libelf-0.8.13\lib\next$(OBJSUFFIX) \
26+
libelf-0.8.13\lib\nextscn$(OBJSUFFIX) \
27+
libelf-0.8.13\lib\rand$(OBJSUFFIX) \
28+
libelf-0.8.13\lib\rawdata$(OBJSUFFIX) \
29+
libelf-0.8.13\lib\rawfile$(OBJSUFFIX) \
30+
libelf-0.8.13\lib\strptr$(OBJSUFFIX) \
31+
libelf-0.8.13\lib\update$(OBJSUFFIX) \
32+
libelf-0.8.13\lib\version$(OBJSUFFIX) \
33+
libelf-0.8.13\lib\checksum$(OBJSUFFIX) \
34+
libelf-0.8.13\lib\getaroff$(OBJSUFFIX) \
35+
libelf-0.8.13\lib\32.fsize$(OBJSUFFIX) \
36+
libelf-0.8.13\lib\32.getehdr$(OBJSUFFIX) \
37+
libelf-0.8.13\lib\32.getphdr$(OBJSUFFIX) \
38+
libelf-0.8.13\lib\32.getshdr$(OBJSUFFIX) \
39+
libelf-0.8.13\lib\32.newehdr$(OBJSUFFIX) \
40+
libelf-0.8.13\lib\32.newphdr$(OBJSUFFIX) \
41+
libelf-0.8.13\lib\32.xlatetof$(OBJSUFFIX) \
42+
libelf-0.8.13\lib\cook$(OBJSUFFIX) \
43+
libelf-0.8.13\lib\data$(OBJSUFFIX) \
44+
libelf-0.8.13\lib\input$(OBJSUFFIX) \
45+
libelf-0.8.13\lib\assert$(OBJSUFFIX) \
46+
libelf-0.8.13\lib\nlist$(OBJSUFFIX) \
47+
libelf-0.8.13\lib\opt.delscn$(OBJSUFFIX) \
48+
libelf-0.8.13\lib\x.remscn$(OBJSUFFIX) \
49+
libelf-0.8.13\lib\x.movscn$(OBJSUFFIX) \
50+
libelf-0.8.13\lib\x.elfext$(OBJSUFFIX) \
51+
libelf-0.8.13\lib\64.xlatetof$(OBJSUFFIX) \
52+
libelf-0.8.13\lib\gelfehdr$(OBJSUFFIX) \
53+
libelf-0.8.13\lib\gelfphdr$(OBJSUFFIX) \
54+
libelf-0.8.13\lib\gelfshdr$(OBJSUFFIX) \
55+
libelf-0.8.13\lib\gelftrans$(OBJSUFFIX) \
56+
libelf-0.8.13\lib\swap64$(OBJSUFFIX) \
57+
libelf-0.8.13\lib\verdef_32_tof$(OBJSUFFIX) \
58+
libelf-0.8.13\lib\verdef_32_tom$(OBJSUFFIX) \
59+
libelf-0.8.13\lib\verdef_64_tof$(OBJSUFFIX) \
60+
libelf-0.8.13\lib\verdef_64_tom$(OBJSUFFIX)
61+
62+
lib\libelf$(LIBSUFFIX): $(OBJECTS)
63+
$(AR) -OUT:$@ $(OBJECTS)
64+
65+
.c$(OBJSUFFIX):
66+
$(CC) /c $(CFLAGS) /Fo:$@ $<
67+
68+
clean:
69+
$(RM) $(OBJECTS) lib\libelf$(LIBSUFFIX)

deps/lib/.gitignore

Whitespace-only changes.

deps/libdwarf-helpers/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#define HAVE_MALLOC_H 1

deps/libdwarf-helpers/libdwarf.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#include "..\libdwarf\libdwarf\libdwarf.h.in"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#include "..\libdwarf.h"

deps/libelf-helpers/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#include "..\libelf-0.8.13\lib\config.h.w32"

0 commit comments

Comments
 (0)