RNDC [RNDC] Mengubah File Object Menjadi DLL

Discussion in 'N3 Source Codes dan Tutorials' started by dono, Dec 31, 2012.

Discuss [RNDC] Mengubah File Object Menjadi DLL in the N3 Source Codes dan Tutorials area at Nyit-Nyit.Net

  1. dono 3 SMP STAFF N3 Tukang Sapu

    Messages:
    2,401
    Likes Received:
    2,570
    Trophy Points:
    141
    Game:
    Dota 2
    Region:
    Australia
    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 [email protected]
    U [email protected]
    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: Jul 7, 2014
    1 person likes this.

    Gunakan jasa Rekber N3 untuk menjamin jual beli anda atau menghindari penipuan dengan meng klik disini
  2. muhammadardi Pra TK Level 1

    Messages:
    22
    Likes Received:
    1
    Trophy Points:
    28
    maaf oot kalau untuk delete file .dll yg terproteksi gmana caranya atau cara edit file .dll ? maaf newbie
     

Share This Page