• Silahkan bergabung dengan chat kami di Telegram group kami di N3Forum - https://t.me/n3forum
  • Welcome to the Nyit-Nyit.Net - N3 forum! This is a forum where offline-online gamers, programmers and reverser community can share, learn, communicate and interact, offer services, sell and buy game mods, hacks, cracks and cheats related, including for iOS and Android.

    If you're a pro-gamer or a programmer or a reverser, we would like to invite you to Sign Up and Log In on our website. Make sure to read the rules and abide by it, to ensure a fair and enjoyable user experience for everyone.

RNDC [RNDC] Mengubah File Object Menjadi DLL

dono

3 SMP
STAFF N3
Tukang Sapu
Pada tutorial kali ini akan dibahas mengenai cara sederhana untuk mengubah file
object (.obj) menjadi .dll pada windows dimana kita tidak mempunyai file source
dan tidak juga memiliki file defenisi, dan hanya memiliki file objectnya saja.
Sebelumnya akan dijelaskan terlebih dahulu cara membuat dll menggunakan bahasa
C dan compiler gcc (mingw).

dll.jpg

Author: drubizca
Group: RNDC


-----[ Langkah-langkah

* Berikut ini adalah contoh source code sederhana menggunakan bahasa C untuk
membuat dll. Kita menggunakan fungsi "_DllMainCRTStartup" dan bukan "DllMain"
tentunya dengan alasan tertentu[1]. Selain itu, kita juga menggunakan direk-
tif 'extern "C" { ... }' untuk mencegah terjadinya name mangling[2]. Dan
agar fungsinya bisa dieksport, maka digunakan keyword "__declspec(dllexport)"
untuk lebih jelasnya bisa dibaca pada MSDN[3]. Listingnya adalah sebagai ber-
ikut:

Code:
1  #include <windows.h>
2
3  #ifdef __cplusplus
4  extern "C" {
5  #endif
6
7  /* fungsi yang dieksport */
8  __declspec(dllexport) void pesan()
9  {
10      MessageBox(NULL, TEXT("hello all :D"), TEXT("pesan"), MB_OK | MB_ICONINFORMATION);
11  }
12
13  /* entry point */
14  BOOL WINAPI _DllMainCRTStartup(HINSTANCE hinst, DWORD dwreason, LPVOID foo)
15  {
16      return 1;
17  }
18
19  #ifdef __cplusplus
20  }
21  #endif
* Selanjutnya, kita akan melakukan kompilasi tanpa proses linking terhadap kode
tersebut.

Code:
    gcc -Wall -c -s -o contoh.obj contoh.c
* Lalu kita melihat fungsi apa saja yang ada pada file object dari proses kom-
pilasi tersebut menggunakan aplikasi nm.

Code:
nm -g contoh.obj
0000002f T __DllMainCRTStartup@12
U _MessageBoxA@1642EQ
00000000 T _pesan
* Terlihat bahwa fungsi "pesan" namanya berubah menjadi "_pesan", hal tersebut
wajar. Selanjutnya kita akan membuat file defenisi untuk digunakan pada pro-
ses linking untuk menentukan fungsi apa saja yang dieksport. Formatnya seder-
hana, cukup menuliskan keyword "EXPORTS" dan spasi kemudian nama-nama fungsi
yang akan dieksport. Untuk contoh dll yang akan kita buat, cukup membuat file
"contoh.def" (namanya tidak harus contoh.def)[4], dan isinya adalah baris ber
ikut:

Code:
    EXPORTS pesan
* Simpan file "contoh.def" lalu kita akan melanjutkan proses linking dengan
perintah seperti ini:

Code:
    gcc -Wall -mdll -s -o contoh.dll contoh.obj contoh.def
* Selanjutnya kita dapat langsung menguji file .dll yang dihasilkan dengan
menggunakan aplikasi bawaan windows yaitu "rundll32" untuk memanggil fungsi
yang dieksport dari file "contoh.dll" dalam hal ini adalah fungsi "pesan".
Caranya sebagai berikut:

Code:
    rundll32 contoh.dll,pesan
* Jika perintah tersebut dijalankan, maka akan muncul messagebox dengan caption
"pesan" dan teksnya "hello all :D". Berarti dll yang kita buat berhasil. Kini
saatnya melanjutkan ke point utama yaitu membuat file dll dari file object
yang tidak disertai file pendukung lainnya.

* Langkahnya sama dengan di atas, yaitu pertama kita mencari fungsi apa saja
yang ada dan bisa diakses dari file objectnya. Kita bisa menggunakan nm:

Code:
nm -g asmxml.obj
00000076 T _ax_classFromElement
00000096 T _ax_classFromString
00000000 T _ax_initialize
0000005e T _ax_initializeClassParser
00000010 T _ax_initializeParser
0000002c T _ax_parse
0000006a T _ax_releaseClassParser
00000020 T _ax_releaseParser
* Atau bisa juga menggunakan aplikasi dari microsoft visual c++/studio yaitu
dumpbin seperti berikut ini:

Code:
dumpbin /symbols asmxml.obj
Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file asmxml.obj

File Type: COFF OBJECT

COFF SYMBOL TABLE
000 00000000 SECT1  notype       Static       | .flat
001 00000000 SECT2  notype       Static       | .asmdata
002 00000000 SECT1  notype       External     | _ax_initialize
003 00000010 SECT1  notype       External     | _ax_initializeParser
004 00000020 SECT1  notype       External     | _ax_releaseParser
005 0000002C SECT1  notype       External     | _ax_parse
006 0000005E SECT1  notype       External     | _ax_initializeClassParser
007 0000006A SECT1  notype       External     | _ax_releaseClassParser
008 00000076 SECT1  notype       External     | _ax_classFromElement
009 00000096 SECT1  notype       External     | _ax_classFromString

String Table Size = 0x9E bytes

Summary

8 .asmdata
44D7 .flat
* Hasilnya sama, ada 8 fungsi dan fungsi-fungsi tersebut tinggal kita masukkan
ke dalam file definisi seperti ini:

Code:
EXPORTS ax_initialize
ax_initializeParser
ax_releaseParser
ax_parse
ax_initializeClassParser
ax_releaseClassParser
ax_classFromElement
ax_classFromString
* Simpan file definisi tersebut, kemudian lanjutkan dengan proses linking:

Code:
    gcc -Wall -mdll -s -o asmxml.dll asmxml.obj asmxml.def
* Setelah selesai, kita dapat mengecek kembali apakah benar fungsi-fungsi
tersebut telah dieksport. Menggunakan dumpbin dengan perintah seperti ini:

Code:
dumpbin /exports asmxml.dll
Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file asmxml.dll

File Type: DLL

Section contains the following exports for asmxml.dll

00000000 characteristics
50D3134D time date stamp Thu Dec 20 20:31:57 2012
0.00 version
1 ordinal base
8 number of functions
8 number of names

ordinal hint RVA      name

1    0 00003076 ax_classFromElement
2    1 00003096 ax_classFromString
3    2 00003000 ax_initialize
4    3 0000305E ax_initializeClassParser
5    4 00003010 ax_initializeParser
6    5 0000302C ax_parse
7    6 0000306A ax_releaseClassParser
8    7 00003020 ax_releaseParser

Summary

1000 .asmdata
1000 .bss
1000 .data
1000 .edata
5000 .flat
1000 .idata
1000 .rdata
1000 .reloc
1000 .text
* Nah, fungsi-fungsinya sudah dieksport, berarti tugas kita telah selesai :D
Sekian tutorial singkat kali ini, semoga bermanfaat.



-----[ Referensi

[1] Initializing a DLL
http://msdn.microsoft.com/en-us/library/7h0a8139.aspx

[2] Name mangling
http://en.wikipedia.org/wiki/Name_mangling

[3] __declspec
http://msdn.microsoft.com/en-us/library/dabb5z75(v=vs.80).aspx

[4] Exporting from a DLL Using DEF Files
http://msdn.microsoft.com/en-us/library/d91k01sh(v=vs.80).aspx


Author: drubizca
Group: RNDC
 
Last edited:
Top