Rastgele Sayı Üreteci ve GetTickCount, RDTSC, nrandom fonksiyonları

Kategori Assembly
09.11.2009
8987 Okunma

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

s3rh47
15 November 2009

Paylasim Icin Sagol

Umarim herkeze faydali Olur

admin

admin
16 November 2009

Umarım! Şimdiye kadar 9 kişi indirmiş keşke daha çok kişiye ulaşabilsek..

zugzwang

zugzwang
26 November 2009

asm ile ilgilenen fazla yok..

Cihangir

Cihangir
10 December 2009

merhaba yeni bir asm öğrencisiyim her türlü bilgiye açığım :) teşekürler bu arada projeler için

admin

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

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

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

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

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

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

fondeep
20 January 2010

siteyi çok beğendim bundan sonra hep buradayım :D

admin

admin
20 January 2010

Her Zaman bekleriz:)

Emre TINAZTEPE

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

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

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

admin
25 February 2011

Yorumun ve ilgin için teşekkürler