Assembly ile rastgele sayı üretmenin bir kaç değişik metodu var. GetTickCount APIsi, RDTSC komutu ve nrandom fonksiyonlarını kullanarak rastgele sayı üretebiliriz. Bunları kullanarak hazırladığım örnek Rastgele Sayı Üretecini yazının sonunda kaynak kodlarıyla beraber bulabilirsiniz.
GetTickCount:
Çağrıldığında işletim sisteminin başladığı andan itibaren geçen zamanı bize milisaniye olarak döndürür ve EAX yazmacına yazdırır. Her çağrılışda farklı bir sayı gelecektir. EAX yazmacına atılan zaman değerinin tamamını ya da 8 bitlik veya 16 bitlik kısımlarını kullanarak rassal bir sayı elde edebilirsiniz. Böylece kendi üreteciğiniz algoritma ya da fonksiyonlarınızda kullanabileceğiniz bir rastgele sayınız olur.
RDTSC:
Time Stamp Counter kelimelerinin kısa halidir. Çağrıldığında bize işlemcinin en son resetlendiği andan itibaren her bir sayıp devrini verecektir. Yalnız bunu zaman ile karıştırmamak gerekir. Time Stamp Counterın 64bit MSR(model spesific register) yazmacı işlemcinin devrine göre bir artarak yazdırılır. RDTSC için ayrılan yazmaçlar EAX ve EDX yazmaçlarıdır. RDTSC komutu düşük öncelikli 32 biti EAX yazmacına yüksek öncelikli 32 biti EDX yazmacına yazar. Yalnız bu komut bize pentium işlemciler ile beraber geldiği için projenizi hazırlarken en üstte en az 586 olmasına dikkat ediniz aksi halde hata verecektir.
Not: Ayrıca işlemci devrinden zamanı hesaplamak isteyenler için:
#saniye = #devir/işlemci hızı(HZ cinsinden)
yukardaki şekilde hesaplaybilirsiniz.
Masm32.lib->nrandom fonksiyonu:
Masm32 ile birlikte gelen rastgele sayı üreten fonksiyondur.
RDTSC
invoke nseed,eax
invoke nrandom,sayı
şeklinde çağrılır burada sayı bir değişken ya da doğrudan bir sayı olabilir. Bu da o sayıya kadar rastgele sayı üretmemizi sağlar.nseed ise nrandom komutunun program açıldığında hep aynı sayıyı değil yine rassal bir sayı üreterek açılmasını sağlar. Kullanılmazsa nrandom yine rastgele sayı üretir ancak program her açıldığında aynı sayı ile açılır. Güzel bir özelliktir.
Elimden geldiğince açıklamaya çalıştım. Yazım hataları ya da belgede eksik/hatalı bilgi verdiysem affola,bana bildirin düzelteyim. Aşağıda bu konuyla ilgili hazırladığım bir örnek proje var kaynak kodlarını inceleyiniz. Ayrıca s3rh47’e de ayrıca teşekkür ederim. Onun da bir projesini buraya ekliyorum o da güzel bir key generator. Random fonksiyonunun nasıl bir key generator içinde kullanıldığını görmek açısından gayet güzel bir uygulama.
[dm]89[/dm]
[dm]90[/dm]
Comments of this post
s3rh47
15 November 2009
Paylasim Icin Sagol
Umarim herkeze faydali Olur
admin
16 November 2009
Umarım! Şimdiye kadar 9 kişi indirmiş keşke daha çok kişiye ulaşabilsek..
zugzwang
26 November 2009
asm ile ilgilenen fazla yok..
Cihangir
10 December 2009
merhaba yeni bir asm öğrencisiyim her türlü bilgiye açığım :) teşekürler bu arada projeler için
admin
11 December 2009
Teşekkürler, elimden geldiğince birşeyler hazırlamaya çalışıyorum. Her zaman bilgisayar ve internet başında olamıyorum mesleğimden dolayı. Aslında bunlar her ne kadar benim projelerim de olsa dışarıdan her türlü güzel proje ve örneğe açığım. Ancak pek ilgilenen yok herhalde. Ya da bu sayfadan haberdar değiller. İşine yaradığına sevindim, kolay gelsin
KUTALMIS
19 December 2009
Eline sağlık hocam, bir sen uğraşıyorsun valla, ortalık programcıyım diye geçinen web tasarımcılarına dot net cilere kaldı :)
admin
23 December 2009
Yorumun için çok teşekkürler Kutalmış :) Gerçi bende şu aralar iş yoğunluğu ve internet sıkıntısı nedseniyle iyice pasife bağladım. Bir an önce internet olayını çözmem lazım ama nasıl olacak bilmiyorum. Daha neler yapacağım ama her zamanda isteyince olmuyor.
Sağlıcakla kal :)
Ahmet Vural
24 December 2009
Site az kişiye ulaşıyor diye düşünüyorum, 3 yıldır bu işlerle iç içeyim daha yeni haberim oldu.
admin
28 December 2009
Tabii bir google, yahoo gibi bütün insanlığa hitap eden bir içeriğimiz olmamasından kaynaklanabilir. Ayrıca sitenin içeriği ülkemiz çoğrafyasında pek az kişiye hitap ediyor. Hatta o insanların çoğuda iyi birer ingilizce bilgilerine sahip olduklarından yabancı sitelerle işlerini halledebiliyorlar. Bu da Türk assembly dünyasının kısıtlı ve Türk ters mühendisliğine olan ilgininde az olmasının başlıca nedenidir
isimsiz
01 January 2010
@KUTALMIS
“ortalık programcıyım diye geçinen web tasarımcılarına dot net cilere kaldı ”
belki aralarında iyi derecede programcı olanlarda vardır,onların hakkını yemeyelim…
Ama nedendir bilmiyorum ,bilgisayar ile ilk tanışan direk web tasarımına yöneliyor:)
fondeep
20 January 2010
siteyi çok beğendim bundan sonra hep buradayım :D
admin
20 January 2010
Her Zaman bekleriz:)
Emre TINAZTEPE
19 May 2010
Kardeşim, eline sağlık. O kadar işin arasında bunlar deşarj olmamızı sağlayan tek şey herhalde:)
Ufaklığı sabırsızlıkla bekliyoruz, kankilerin olarak. Seni andık geçen…
Gel artık da birer kahve içelim…
Dikkat kardeşim kendine
admin
05 June 2010
Sağol kardeşim, elimden geldiğince ve zaman(!) buldukça birşeyler yapmaya çalışıyorum. Ufaklık 7,5 aylık oldu, darısı başına. Umarım yakın zamanda karşılaşırız. Yeni projem var başladım bitirince ekliyeceğim siteye. Kendine iyi davran görüşmek üzere.
DarkStyle
13 February 2011
Ters Mühendislik icin mükemmel bir Paylasim,Almanyada yasiyorum. Islerimden dolayi pek fazla ilgilenemiyorum.
Ilgilendigim alan Delphi7 ve Assembly
Paylasimdan dolayi tesekkür eder basarilarinin devamini dilerim.
admin
25 February 2011
Yorumun ve ilgin için teşekkürler