BlackNullSec Path : Pointer_5
🚀 Amaç:Bir pointer, bellekteki bir adresi tutan değişkendir. Yani başka bir değişkenin adresini saklar.
🔎 Neden Pointer Kullanırız?
🧪 Function Pointer
Normal pointer=Veri adresini tutar.
Function Pointer= Fonksiyonun adresini tutar.
yani fonksiyonun bir degişken gibi saklayabilir,çagırabilirsin
Windows Apı'de neden function pointer gerekir
1-)GetProcAdddres Apı adresini void* olarak dondür
2-)NtDll içinde dinamik Apı resolve ederken Function kullanın
3-)Reflective Loader/Manuel Mapping -> Apılerin pointer saklar
4-)Thread yaratırken EntryPoint fonsiyonu pointer olarak veririsin
ÖR:
typeDef NTSTATUS(NTAPI *FnNTWriteVirtualMemory)(
HANDLE,PVOID,ULONG,PULONG
);
Bu satırı anlamı *FnNTWriteVirtualMemory isimli degişken bir fonksiyonun adresini tutacak yani=Bu adresi çagırdıgımızda NTAPI çalışıcak.
🥇 ÖRNEK
int add(int a, int b){
return a + b;
}
int (*fp)(int, int) = add;
printf("%d", fp(2,3)); // 5
AÇIKLAMA:
1.) add = fonksiyonun adresi
2.) fp = o adresi tutan pointer
3.) fp() = fonksiyonu çağırır
🥈 2. NORMAL POINTER vs FUNCTION POINTER
Normal Pointer:
int *p → veri adresi tutar
Function Pointer:
int (*fp)(int,int) → fonksiyon adresi tutar
⚡GETPROCADDRESS
typedef HANDLE (WINAPI *FnCreateFileA)(
LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES,
DWORD, DWORD, HANDLE
);
FARPROC addr = GetProcAddress(hModule, "CreateFileA");
FnCreateFileA CreateFileA = (FnCreateFileA)addr;
CreateFileA("test.txt", ...);
AÇIKLAMA:
1.) GetProcAddress → adres verir (void*)
2.) cast → doğru tipe çevirir
3.) pointer → fonksiyonu çağırır
🌟 Sonraki Yazı: Pointer_6
← Önceki Sonraki →⚠️ Kritik Uyarı
Bu teknikler yalnızca eğitim amaçlıdır. Gerçek sistemlere uygulanması yasadışı olabilir. Asla gerçek ortamlarda test etme.
“Windows Belleğiyle Konuşan Kodlar”
hacker