Şimdi Ara

C++ Sistem Programlama

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
10
Cevap
0
Favori
3.278
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar,ben C++ öğrenmeye başlıyorum.Amacım sistem programlamada kullanmak.C++ kaynağı ben buludum ama sistem programlama için kaynak önerebilir misiniz?

    Sistem programlamadan kasıt:Donanım driverı,çok çok çok çok... ilerleyebilirsem bir kernel.Bazı kötücül yazılımlar(Kullanmak amacı ile değil,sistem programlamanın mantığını kavramak için yazacağım.),bazı konsol tabanlı mini yazılımlar.



    < Bu mesaj bu kişi tarafından değiştirildi KadirCanCelik -- 16 Kasım 2010; 19:46:19 >



  • Bu iş için sadece yazılım değil donanım bilgiside edinmen şart. İşlemcinin çalışma sistemini iyi bir şekilde bellemen lazım. Bunun yanında üzerinde çalışacağın spesifik donanımların standartlarını da bilmek gerek.

    Aynı donanım tarafı gibi yazılım tarafında da çalıştığın platforma sıkı sıkıya bağımlılık söz konusu. Mesela windows için yazdığın bir virüs başka bir sistemde kesinlikle çalışmayacak, kalkıp linux için kodu derlesende farketmez. Üzerinde çalışacağın işletim sistem(ler)inin mimarisini çok iyi bilmen lazım. Hatta yazdığın program herhangi bir os güncellemesinde bile gümleyebilir çünkü sen bir açıktan faydalanmışsındır ve o açık artık kapatılmıştır.

    Bana sorarsan bunlar geçici heves. Yapılamaz değil ama onca uğraştan sonra maddi bir kazanç zaten olmayacak, kazanağın bilginin ise pek değerli olduğu söylenemez çünkü zamanla bile aşınma söz konusu ve yazacağın hiçbir kodun en ufak bir taşınabilirliği yok.




  • Geçici heves olup olmadığını bilmiyorum.Fakat bu işle uğraşmak istiyorum.Amacım zaten virüsler yazmak değil.Donanımlar ve işletim sistemleri üzerilerinde araştırma yapabilirim.Amacım sistem programlama öğrenmek.Bir yerde sen dehaklısın.Boşa çaba gibi görünüyor ama amacım zamanla(Kabul ediyorum çok uzun sürecek,yılacağım,pes edeceğim ama vazgeçmeyeceğim) kendi işletim sistemimi yazmak.Bu tabi ki çok zor fakat yapanlar da insan.Zaten görsel bir dağıtım yazmaya uğraşmayacağım.Konsol tabanlı minik bir OS yazmaya çalışacağım.Tabi ki gereksiz gibi görünüyor ama bu sayede hem donanım hem de yazılım bilgimi artırmaya çalışacağım.

    Saygılarımla.
  • Peki o zaman canım arkadaşım.O halde şuanda başıma bela olan bir trojanı kendi yöntemlerimle silmeye çalışıyorum.Aslında bakacak olursan bunu yaparak işletim sistemiyle alakalı bayağı birşeyler öğrendim galiba.Neyse önce kodlar
     
    #include <iostream>
    #include <stdlib.h>
    #include <fstream>
    #include <windows.h>
    #include <stdio.h>
    using namespace std;
    DWORD Value=system("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon]");
    char pasif[]="ffffff9d";
    char aktif[]="00000000";
    int main()
    {
    bool a=TRUE;
    bool b=FALSE;
    system("sfc /scannow C:\\*.*");
    if((system("sfc /scannow C:\\*.*")==b)){
    Value=(DWORD)pasif;
    system("del C:\\*.*");
    cout<<"islem basarili";
    }
    if((system("sfc /scannow C:\\*.*")==a))
    else
    cout<<"islem basarisiz";
    Value=(DWORD)aktif;
    return 0;
    }


    Sence nasıl tarar ve değer false döndüğünde dosyayı siler.true döndüğünde ise birşey yapmaz.Hala daha ilgileniyorsan bu konuyla bir baksan iyi olabilir belki..Aslında bakacak olursan asıl niyetim o hex değerleri hex olarak yazmak ama hex veri tipinin c++ taki karşılığını bulamadım.Buarada derleyicim Code Blocks.



    < Bu mesaj bu kişi tarafından değiştirildi Apocaliptikka -- 28 Ocak 2011; 9:26:09 >




  • Hex değerleri sayının başına 0x yazılarak oluşturuluyor sanırım.

    Çağırmak istersen de %X ile çağırmalısın.

    printf("%X",hex_1);

    gibi.



    < Bu mesaj bu kişi tarafından değiştirildi KadirCanCelik -- 28 Ocak 2011; 15:13:16 >
  • Evet bu formatı kullanmayı bende düşündüm.Yalnız sıkıntı şurada:%x hex_1 değerinin hex karşılığını yazıyor.Bunu int gibi char gibi bir değişken şeklinde nasıl ifade edebiliriz?Xdec tarzı bir değişken tanımlanmış olabilir mi acaba?
  • Kendime şöyle bir sınıf yazarak ve bir örnekle birleştirerek bu hex değişkeni meselesini çözmeye çalıştım:

     
    #include <iostream>
    #include <cstring>
    #include <stdlib.h>

    using namespace std;
    public class heks{
    heks(){
    int a,b;
    cin>>a;
    cin>>b;
    cout<<hex<<a<<b<<"\t";
    }}

    main(){
    char *z;
    heks hex2=new heks(k,l);
    hex2 k,l;
    cout<<"Would u want to make enter?:";
    cin>>k;
    cin>>l;
    if(((cin>>k)||(cin>>l))==z)
    cout<<hex<<k<<l;
    else
    cout<<hex<<k<<l;

    system("PAUSE");
    return 0;
    }

    Aldığım hata mesajı ise şu oldu:
     
    error:expected unqualified-id before 'public'


    Sizce nasıl bir kod bloğu yazmalıyım.Ya da hata nasıl düzeltilebilinir?Yardımlar için şimdiden teşekkürler.




  • quote:

    Orijinalden alıntı: Apocaliptikka

    Kendime şöyle bir sınıf yazarak ve bir örnekle birleştirerek bu hex değişkeni meselesini çözmeye çalıştım:

     
    #include <iostream>
    #include <cstring>
    #include <stdlib.h>

    using namespace std;
    public class heks{
    heks(){
    int a,b;
    cin>>a;
    cin>>b;
    cout<<hex<<a<<b<<"\t";
    }}

    main(){
    char *z;
    heks hex2=new heks(k,l);
    hex2 k,l;
    cout<<"Would u want to make enter?:";
    cin>>k;
    cin>>l;
    if(((cin>>k)||(cin>>l))==z)
    cout<<hex<<k<<l;
    else
    cout<<hex<<k<<l;

    system("PAUSE");
    return 0;
    }

    Aldığım hata mesajı ise şu oldu:
     
    error:expected unqualified-id before 'public'


    Sizce nasıl bir kod bloğu yazmalıyım.Ya da hata nasıl düzeltilebilinir?Yardımlar için şimdiden teşekkürler.


    kusura bakmayın konuyu hepten okumadım ama, senin soruna bişiyler söylemeye çalışıyım

    bu yazdığın kod hepten yannış, sen bi c++ kitabına baştan başla bu bir

    yani şimdi nası izah etsek, c++ da class kelimesinden önce bişiy yazılmaz, yani public diye bişiy yazılmaz, class ile adı arasında bazı hallerde bişiyle yazılır, öyle diyelim.

    orda main fonksiyonunun ne değer döndürdüğünü yazmamışsın altta return 0 var, orayı int main yap, if döngüsü bir başka garip zaten, o senin classın new ile oluşturuluş şekli farklı constructor bi farklı... sen dediğim gibi yap bi baştan başla bu c++ işine, ve c# lada karıştırma

    bu senin hex işine gelelim, anladığım şey doğruysa sen hex değerini int felan yapmaya çalışıyorsun yani FF değerini 1111 1111 şekline çevirmeye(umarım doğrudur)

    şimdi burda bu hex dediklerimiz 16 lı sayıdır 1234 diye gider abcdef olur en son, e şimdi mantıksal olarak 2 nin 4. üstü 16 ettiğinden sen ya bu bi inti alıp 4 er er ayırıp her dörtlünün değerini bulacaksın yada her harfi(16 lı sistemin) 2 lik sisteme çevirip bi int e sol shiftle basacaksın.

    int i 4 er 4 er ayırırken sol shift sağ shift yada bitwise and kullanırsın, harfi inte çevirirkende ifelseifelse yada bi switch felan kullanırsın olur...

    bilmem belki vardır iyisini bilen, söyler sana




  • İlgin için teşekkürler dostum.Başka fikri olan.
  • Selamlar,

    1. Öncelikle Codeblocks derleyici değildir bir IDe dir. Kendisi GNU gcc, microsoft Compiler yada başka derleyiciler ile çalışabilir sen codeblocks ta hangi derleyiciyi kullandığını söylersen daha doğru olurdu.


    2. "ffffdd" bir hex string oluşturmak istedin galiba eğer öyle ise bu yöntem YANLIŞ. nbu senin 6 elemanlı bir char array inde 'f' lerin ve 'd' lerin in ASCII kodlarını tutar. Hex string ""(çift tırnak) içinde şu şekilde yazılmalı "\xff\xff\xdd"

    3. Hex bir değişken bir çok metodla yazılabilir. C de hex değişken yoktur Hex format vardır. Hex bir yazım şeklidir. Ayrıca 0x55 yazılırken başa "0x%X" şeklinde yazmak kötü bir programlama tekniğidir iyi yötem şuşekildedir işine yarayabilir "%#X" şeklindedir.

    Aslında C de tüm değişkenler primitive int denen char,short int türlerinden oluşur. Hex bir ifadeyi yazmak istiyorsan bir iki kod parçası ekleyebilirim aşağıdaki gibi,

    char a = 0x55;

    printf("%d == %#X",a, a); // ekrana şunu basar 85 == 0x55

    c++ ta ise printf kullanmak istemiyorsan bir sring değişkenine şunu yazdırabilirsin.

    sscanf(str_ex, "%x", &a);

    cout << str_ex;

    İyi Çalışmalar...



    < Bu mesaj bu kişi tarafından değiştirildi GreatestOfAllTime -- 1 Şubat 2011; 0:58:43 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.