Assembly Bilmek
-
assembly bilmek ne kazandirir insana soyleyebilirmisiniz ?
virus vs yazmak icin ideal dil diolar baska ne getirisi olur ki asm nin -
- İşlemcinizin gücünü en iyi şekilde ortaya koyabilecek tek programlama dilidir.
- Cok az yer kapladığı için bilgisayar virüslerin yazımında kullanılırlar.
- Çok hızlı çalıştıkları için işletim sistemlerinde kernel ve donanım sürücülerinin programlanmasında, hız gerektiren kritik uygulamalarda kullanılmaktadır.
- Yapısı itibariyle üç boyutlu ekran kartlarında ilgili çizim ve efektlerin işlenmesi amacıyla hem oyunlar hem de programlar içinde ekran kartına hitap eden makina dili kodları kullanılmaktadır.
- Herhangi bir amaç doğrultusunda (genelde programların daha hızlı çalışması için optimize edilirken), herhangi bir programlama dili altında, o dilin kodları arasında kullanılabilir. Yani diğer dillerle beraber de kullanabilirsiniz. Sizin uzman olduğunuz dil belki Visual Basic dir. Ama işin içinden çıkamadınız, assembly bilen bir arkadaşınız sizin için birkaç kod ekledi ve tamam.
- İyi öğrenildiğinde diğer dillerde karşılaşılan büyük problemlerin assembly ile basit çözümleri olduğu görülür. Yani başka programlama dillerde çalışan insanların bu iş imkansız dediği yerde assembly devreye girer. Bu üstünlük daima var olacaktır...
- Yazdığınız programın kaynak kodlarını tüm dünya ile paylaşsanız dahi kodlar o kadar karmaşıktır ki insanlar assembly bilse dahi ne işe yaradığını çözmeleri çok uzun zamanlarını alır. (Açıklayıcı bilgiler koymadı iseniz) Assembly bilmeyen bir insanın kaynak kodu anlaması imkansızdır.
- Her program derlendiğinde makina diline dönüşür. Bunlar assembly kodlarına dönüştürülebilirler. (Buna disassembly olayı denir, bunu yapan programlar ise disassembler'lar dır.) Bu sayede assembly bilen bir insan zor da olsa diger programların çalışma şekillerini inceleyebilir ve üzerlerinde oynama yapabilir. Bu özellik de başka hiçbir dilde yoktur. Daha ileri gidip programların şifre isteyen bölümleri değişik yöntemlerle kırılabilir. Serial Generator türü programlar bu şekilde yapılabilmektedir.
- Zaman geçtikce ve insanlar üreten yerine tüketen bilgisayar kullanıcıları haline geldikçe bu dili bilmenin ayrıcalığı artmaktadır. -
serhat8102 bunu yazdı
- İşlemcinizin gücünü en iyi şekilde ortaya koyabilecek tek programlama dilidir.
- Cok az yer kapladığı için bilgisayar virüslerin yazımında kullanılırlar.
- Çok hızlı çalıştıkları için işletim sistemlerinde kernel ve donanım sürücülerinin programlanmasında, hız gerektiren kritik uygulamalarda kullanılmaktadır.
- Yapısı itibariyle üç boyutlu ekran kartlarında ilgili çizim ve efektlerin işlenmesi amacıyla hem oyunlar hem de programlar içinde ekran kartına hitap eden makina dili kodları kullanılmaktadır.
- Herhangi bir amaç doğrultusunda (genelde programların daha hızlı çalışması için optimize edilirken), herhangi bir programlama dili altında, o dilin kodları arasında kullanılabilir. Yani diğer dillerle beraber de kullanabilirsiniz. Sizin uzman olduğunuz dil belki Visual Basic dir. Ama işin içinden çıkamadınız, assembly bilen bir arkadaşınız sizin için birkaç kod ekledi ve tamam.
- İyi öğrenildiğinde diğer dillerde karşılaşılan büyük problemlerin assembly ile basit çözümleri olduğu görülür. Yani başka programlama dillerde çalışan insanların bu iş imkansız dediği yerde assembly devreye girer. Bu üstünlük daima var olacaktır...
- Yazdığınız programın kaynak kodlarını tüm dünya ile paylaşsanız dahi kodlar o kadar karmaşıktır ki insanlar assembly bilse dahi ne işe yaradığını çözmeleri çok uzun zamanlarını alır. (Açıklayıcı bilgiler koymadı iseniz) Assembly bilmeyen bir insanın kaynak kodu anlaması imkansızdır.
- Her program derlendiğinde makina diline dönüşür. Bunlar assembly kodlarına dönüştürülebilirler. (Buna disassembly olayı denir, bunu yapan programlar ise disassembler'lar dır.) Bu sayede assembly bilen bir insan zor da olsa diger programların çalışma şekillerini inceleyebilir ve üzerlerinde oynama yapabilir. Bu özellik de başka hiçbir dilde yoktur. Daha ileri gidip programların şifre isteyen bölümleri değişik yöntemlerle kırılabilir. Serial Generator türü programlar bu şekilde yapılabilmektedir.
- Zaman geçtikce ve insanlar üreten yerine tüketen bilgisayar kullanıcıları haline geldikçe bu dili bilmenin ayrıcalığı artmaktadır.- Dilin öğrenilmesi uzun zaman ve emek ister.
- Yazılan programlar diğer diller göre daha çok satırdan oluşur.
- Yazdığınız programın hangi satırlarının ne iş yaptığını bir süre sonra anlamayabilirsiniz. Çünkü anlaşılması zor ve karmaşık bir dildir. Bu nedenle kodların sonuna açıklama bölümleri eklemek iyi bir çözüm olacaktır.
- İşlemciye birebir bağımlıdır. Yani sonraki sayfalarda anlatılacak olan kodlar Intel ve uyumlu (AMD, Cyrix, Via) işlemcilerde geçerlidir. Örneğin Motorola işlemcileri kullanan Macintosh bilgisayarlarda hem komut setinin hem de işlemci mimarisindeki büyük farklılıklardan dolayı geçersizdir. Fakat onlarda da bir makina dili tabii ki bir assembly dili bulunmaktadır. Fakat komutlar daha farklıdır. Bizim ilgi alanımız intel 386 (i386) üstü ve bunlarla uyumlu işlemcilerdir. -
dezavantajşarını yazmadım :D adam getirisini sormuş
-
yani python da uygulama gelistiorum diyelim
bir yeri fantezisine asm ile yazabilirim dimi ?
-
Vkalum bunu yazdı
yani python da uygulama gelistiorum diyelim
bir yeri fantezisine asm ile yazabilirim dimi ?
python bilmiyorum ama muhtemelen oluyordur, çünkü bütün proğramlama dillerinin temeli asm ile oluşturuluyor.
-
pc de assembly kullanmak ne kadar mantıklı bilmiyorum
sen bir windows assemblerde hello word nasıl yazılır araştır öyle karar ver
-
dur yazayım :D
.MODEL Small
.STACK 100h
.DATA
db msg 'Hello, world!$'
.CODE
start:
mov ah, 09h
lea dx, msg ; or mov dx, offset msg
int 21h
mov ax,4C00h
int 21h
end start
delphide de şöyle yazılır
begin
Writeln('Hello, world!');
end.
(gece gece niye bu kadar uğraştıysam)
serhat8102 tarafından 07/Eki/13 01:15 tarihinde düzenlenmiştir -
format PE GUI
entry start
section '.code' code readable executable
start:
push 0
push _caption
push _message
push 0
call [MessageBox]
push 0
call [ExitProcess]
section '.data' data readable writeable
_caption db 'Win32 assembly program',0
_message db 'Hello, world!',0
section '.idata' import data readable writeable
dd 0,0,0,RVA kernel_name,RVA kernel_table
dd 0,0,0,RVA user_name,RVA user_table
dd 0,0,0,0,0
kernel_table:
ExitProcess dd RVA _ExitProcess
dd 0
user_table:
MessageBox dd RVA _MessageBoxA
dd 0
kernel_name db 'KERNEL32.DLL',0
user_name db 'USER32.DLL',0
_ExitProcess dw 0
db 'ExitProcess',0
_MessageBoxA dw 0
db 'MessageBoxA',0
section '.reloc' fixups data readable discardable
(cp)
-
çok spesifik bir şeylerle uğraşmayacaksan gerek yok hocam. bir de elektronikte yaygın olarak kullanılır. Artık virusler eskisi gibi hasarlar veremiyor. AV lerde olası tehdit barındıan içerikler kolay yakalanabilyor. Günümzde virus yerine trojanlar popüler(di) o da gözlemlediğim kadarıyla düşüştü.
Sistem programcısı olmayacaksan ya da elektronikle uğraşmayacaksan (alternatif bir sürü dil var ayrıca belirteyim) C tabanlı bir dilde ilerlemen daha mantıklı. Piyasaya hitap etmek istiyorsan böyle olmalı. Ama aşırıya gitmek istersen mesela savunma sanayinde çalışmak istersen öğren :)
-
serhat8102 bunu yazdı
- İşlemcinizin gücünü en iyi şekilde ortaya koyabilecek tek programlama dilidir.
- Cok az yer kapladığı için bilgisayar virüslerin yazımında kullanılırlar.
- Çok hızlı çalıştıkları için işletim sistemlerinde kernel ve donanım sürücülerinin programlanmasında, hız gerektiren kritik uygulamalarda kullanılmaktadır.
- Yapısı itibariyle üç boyutlu ekran kartlarında ilgili çizim ve efektlerin işlenmesi amacıyla hem oyunlar hem de programlar içinde ekran kartına hitap eden makina dili kodları kullanılmaktadır.
- Herhangi bir amaç doğrultusunda (genelde programların daha hızlı çalışması için optimize edilirken), herhangi bir programlama dili altında, o dilin kodları arasında kullanılabilir. Yani diğer dillerle beraber de kullanabilirsiniz. Sizin uzman olduğunuz dil belki Visual Basic dir. Ama işin içinden çıkamadınız, assembly bilen bir arkadaşınız sizin için birkaç kod ekledi ve tamam.
- İyi öğrenildiğinde diğer dillerde karşılaşılan büyük problemlerin assembly ile basit çözümleri olduğu görülür. Yani başka programlama dillerde çalışan insanların bu iş imkansız dediği yerde assembly devreye girer. Bu üstünlük daima var olacaktır...
- Yazdığınız programın kaynak kodlarını tüm dünya ile paylaşsanız dahi kodlar o kadar karmaşıktır ki insanlar assembly bilse dahi ne işe yaradığını çözmeleri çok uzun zamanlarını alır. (Açıklayıcı bilgiler koymadı iseniz) Assembly bilmeyen bir insanın kaynak kodu anlaması imkansızdır.
- Her program derlendiğinde makina diline dönüşür. Bunlar assembly kodlarına dönüştürülebilirler. (Buna disassembly olayı denir, bunu yapan programlar ise disassembler'lar dır.) Bu sayede assembly bilen bir insan zor da olsa diger programların çalışma şekillerini inceleyebilir ve üzerlerinde oynama yapabilir. Bu özellik de başka hiçbir dilde yoktur. Daha ileri gidip programların şifre isteyen bölümleri değişik yöntemlerle kırılabilir. Serial Generator türü programlar bu şekilde yapılabilmektedir.
- Zaman geçtikce ve insanlar üreten yerine tüketen bilgisayar kullanıcıları haline geldikçe bu dili bilmenin ayrıcalığı artmaktadır.1) x86 asm yazıp da MMX, SSE, SSE2, SSE3... genişletmelerini kullanan hiçbir insan tanımıyorum (yok değil, ben tanımıyorum. Bu konuda da örnek koda, Intel'in kitapçıkları hariç, rastlamadım).
2) Kodlama yükü ile çıktı boyutu arasındaki ilişki günümüzde çok önemli değildir. Virüsler de dahil olmak üzere.
3) İşlemcinin tüm olanaklarından yararlanmıyorsanız en hızlı programı da yazmamışsınız demektir (birinci madde).
4) Baştan x86 asm kodlama yerine C, C++, Delphi vs. dillerin satır içi asm olanağından yararlanılarak optimizasyon yapılır ya da halihazırda derlenen program parçalarının en iyilemesi refactoring metodu ile sağlanır. C'de bile satır içi asm standart değildir.
5) Problem çözümü her zaman için bir yığın kullanmak ya da ağır aritmetik işlemleri gerçekleştirmek değildir. Problemin çözümünde ne kadar yüksek seviyeye çıkarsanız o kadar rahat edersiniz.
6) asm ile yazdığınız uygulamaya kod yükünden dolayı müdahale etmekte zorlanacağınız için C ile derleyip dağıttığınız uygulamaların kırılması daha zor olabilir.
Elinizin altında 2,0 GHz işlemci ve 1 GB bellek varsa önceliğiniz performans değil stabilite olmalıdır. sadece 100 defa dönen bir döngüyü 20-30 ms hızlandırmak için asm ile kastırılmaz. Tabi elinizde 1M+ dönen bir döngü varsa her adımdaki 10 ms'lik bir kazanç yakalayabiliyorsanız yaklaşık 166 dakika kazanırsınız.
Sözüm o ki çok özel bir iş yapmıyorsanız da öğrenin. Hiçbir işinize yaramasa bile (ki yarayacağını düşünüyorum) farklı bir bakış açısına sahip olursunuz. emu8086 ile başarılar diliyorum.