Skip to content

Latest commit

 

History

History
380 lines (277 loc) · 7.54 KB

File metadata and controls

380 lines (277 loc) · 7.54 KB

Assembly Kodlarını Derleme ve Çalıştırma Rehberi

Bu dokümanda, projede bulunan x86-64 Assembly kodlarını nasıl derleyip çalıştırabileceğinizi öğreneceksiniz.

İçindekiler

  1. Ön Gereksinimler
  2. Yöntem 1: Online Compiler (En Kolay)
  3. Yöntem 2: NASM (Önerilen)
  4. Yöntem 3: Visual Studio (MASM)
  5. Yöntem 4: C# ile Test Etme
  6. Yöntem 5: Debugger ile Adım Adım

Ön Gereksinimler

Bu projede kullanılan Assembly kodu formatı:

  • Mimari: x86-64 (64-bit)
  • İşletim Sistemi: Windows
  • Calling Convention: Microsoft x64 (RCX, RDX, R8, R9 parametreler)
  • Syntax: MASM-benzeri

Yöntem 1: Online Compiler (En Kolay)

Assembly kodunu tarayıcıda derleyip test edin.

Godbolt Compiler Explorer

  1. https://godbolt.org adresine gidin
  2. Sol üstten "Language" seçeneğini "Assembly" yapın
  3. "Compiler" olarak "x86-64 MSVC" veya "x86-64 gcc" seçin
  4. Kodunuzu yapıştırın ve sonuçları görün

Not: Godbolt kodu çalıştırmaz, sadece derler ve makine kodunu gösterir.

Online GDB

  1. https://www.onlinegdb.com adresine gidin
  2. "Language" seçeneğini "Assembly - NASM" yapın
  3. Kodunuzu yapıştırın
  4. "Run" butonuna basın

Dikkat: Online GDB için NASM formatına çevirme gerekebilir.


Yöntem 2: NASM (Önerilen)

NASM (Netwide Assembler), Windows, Linux ve macOS'ta çalışan popüler bir assembler'dır.

Kurulum

Windows:

# Chocolatey ile:
choco install nasm -y

# Veya manuel indirme:
# https://www.nasm.us/pub/nasm/releasebuilds/
# nasm-x.xx.xx-installer-x64.exe dosyasını indirin ve kurun

Linux:

sudo apt-get install nasm

macOS:

brew install nasm

Derleme

Assembly dosyalarınız MASM formatında olduğu için önce NASM formatına çevirmeniz gerekir.

MASM Formatı (Mevcut):

.code
add_numbers proc
    mov rax, rcx
    add rax, rdx
    ret
add_numbers endp
end

NASM Formatı (Çevrilmiş):

bits 64
section .text
global add_numbers

add_numbers:
    mov rax, rcx
    add rax, rdx
    ret

Derleme komutu:

nasm -f win64 dosya.asm -o dosya.obj

Linking (DLL oluşturma):

# Visual Studio varsa:
link /dll /out:assembly_lib.dll dosya.obj

# MinGW varsa:
ld -shared -o assembly_lib.dll dosya.obj

Yöntem 3: Visual Studio (MASM)

Microsoft'un resmi assembler'ı. Visual Studio Build Tools ile birlikte gelir.

Kurulum

  1. Visual Studio Installer'ı indirin
  2. "C++ Desktop Development" workload'unu yükleyin
  3. "MSVC Build Tools" seçeneğini işaretleyin

Derleme

Developer Command Prompt açın:

Başlat > Visual Studio 2022 > Developer Command Prompt for VS 2022

Derleme komutu:

ml64 /c dosya.asm

Linking:

link /dll /out:assembly_lib.dll dosya.obj

Tam Örnek

Projede bulunan bir dosyayı derlemek için:

cd "c:\Users\...\basic-assembly\03_add"
ml64 /c example_01.asm
link /dll /out:add_functions.dll example_01.obj

Yöntem 4: C# ile Test Etme

Assembly fonksiyonlarını C# ile çağırarak test edin.

Adım 1: Assembly Kodunu DLL'e Çevirin

NASM formatında math_functions.asm oluşturun:

bits 64
section .text
global add_numbers

add_numbers:
    mov rax, rcx
    add rax, rdx
    ret

Derleyin:

nasm -f win64 math_functions.asm -o math_functions.obj
link /dll /out:math_functions.dll math_functions.obj

Adım 2: C# Test Kodu

TestAssembly.cs dosyası:

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("math_functions.dll", CallingConvention = CallingConvention.Cdecl)]
    private static extern long add_numbers(long a, long b);

    static void Main()
    {
        long result = add_numbers(10, 20);
        Console.WriteLine($"10 + 20 = {result}");
    }
}

Derleyin ve çalıştırın:

csc TestAssembly.cs
.\TestAssembly.exe

Beklenen çıktı:

10 + 20 = 30

Yöntem 5: Debugger ile Adım Adım

Assembly kodunu satır satır çalıştırarak öğrenin.

x64dbg (Önerilen)

Kurulum:

  1. https://x64dbg.com adresinden indirin
  2. Zip dosyasını açın
  3. x64dbg.exe çalıştırın

Kullanım:

  1. File > Open > DLL dosyanızı seçin
  2. CPU penceresinde assembly komutları görünür
  3. F7 ile adım adım ilerleyin
  4. Yazmaçları sağ panelden izleyin

Visual Studio Debugger

  1. Visual Studio'da C++ projesi oluşturun
  2. Project Properties > Linker > Input > Additional Dependencies
  3. Assembly DLL'inizi ekleyin
  4. Breakpoint koyun ve F10/F11 ile ilerleyin
  5. Registers penceresini açın (Debug > Windows > Registers)

WinDbg

Kurulum:

winget install Microsoft.WinDbg

Kullanım:

.load dll_yolu
bp fonksiyon_adi
g
r  (yazmaçları göster)
t  (tek adım ilerle)

Örnek: Tam İş Akışı

Projede bulunan 03_add/example_01.asm dosyasını test edelim.

1. NASM Formatına Çevir

03_add/example_01_nasm.asm oluşturun:

bits 64
section .text
global add_params

add_params:
    mov rax, rcx
    add rax, rdx
    ret

2. Derle

cd 03_add
nasm -f win64 example_01_nasm.asm -o example_01.obj
link /dll /out:add_lib.dll example_01.obj

3. C# Testi

using System;
using System.Runtime.InteropServices;

class Test
{
    [DllImport("add_lib.dll")]
    static extern long add_params(long a, long b);

    static void Main()
    {
        Console.WriteLine($"5 + 10 = {add_params(5, 10)}");
        Console.WriteLine($"100 + 250 = {add_params(100, 250)}");
        Console.WriteLine($"-5 + 15 = {add_params(-5, 15)}");
    }
}

Çalıştır:

csc Test.cs
.\Test.exe

Beklenen çıktı:

5 + 10 = 15
100 + 250 = 350
-5 + 15 = 10

Sorun Giderme

"ml64 komutu bulunamadı"

Visual Studio Developer Command Prompt kullanın veya PATH'e ekleyin:

$env:PATH += ";C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.xx.xxxxx\bin\Hostx64\x64"

"nasm komutu bulunamadı"

NASM'ı PATH'e ekleyin:

$env:PATH += ";C:\Program Files\NASM"

DLL yüklenemiyor (C#)

DLL dosyasının .exe ile aynı klasörde olduğundan emin olun veya tam yol belirtin:

[DllImport(@"C:\tam\yol\add_lib.dll")]

Linking hatası

Visual Studio Build Tools'u doğru yükleyin:

# Link.exe'nin yolu:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.xx.xxxxx\bin\Hostx64\x64\link.exe

Önerilen Öğrenme Yolu

  1. İlk aşama: Online compiler (Godbolt) ile kodları test edin
  2. İkinci aşama: NASM kurarak lokal olarak derleyin
  3. Üçüncü aşama: C# ile test kodları yazın
  4. İleri seviye: Debugger ile adım adım çalıştırın

Kaynaklar


Notlar

  • Bu projede kullanılan MASM formatı .code, .data, proc, endp gibi direktifler içerir
  • NASM formatı section .text, global, basit etiketler kullanır
  • Windows x64 calling convention: İlk 4 parametre RCX, RDX, R8, R9
  • Dönüş değeri her zaman RAX'te
  • Yazmaçları korumak için PUSH/POP kullanın (ileri seviye konular)