SORU
1 EYLÜL 2009, Salı


Öğrenme Kurul

Assembly dilini öğrenmeye karar verdim. Bunun ana nedeni demonte kod ve belki de kod daha verimli parçalar (c aracılığıyla örneğin), kod mağaralar gibi birşeyler yapmak, vb yazabilme ve anlayabilme. Kurul, farklı tatlar, yani, bahsettiğim amaçlar için bir sürü vardır gördüm, nasıl başlamalıyım? Ne tür bir Kurul öğrenmeli miyim? Ben öğrenmek istiyorum ilk yapmak kolay bazı programlar (örneğin, bir hesap makinesi), ama amaç kendisi için accostumed ile çok anlayabiliyorum kodu gösterilir, örneğin, IDA Pro.

Windows eğer herhangi bir fark yaratır mı () kullanıyorum.

herkes doğru MASM işaret ediyor gibi görünüyor. edit: Yüksek düzey yetenekleri, montaj kodu programcı için iyi olduğunu anladım ancak aradığım şey bu değil. Eğer, çağır, talimatları gösterilmeyen popüler deassemblers (IDA gibi) vb gibi. Yani istediğim şey duymak mümkünse, görüşün herkes bunu kullanır MİGROS amaçlar için soruyorum (okuma deassembled exe kodu IDA), sadece "genel" kurul programcılar.

edit: TAMAM. Zaten assembly öğreniyorum. MASM öğrenme, benim için önemli değil yüksek seviye malzeme kullanarak değilim. Şu anda yaptığım işleri daha hızlı eğer MASM ile sıfırdan her şeyi yapmak zorunda kalsam daha denemek böylece c __kanamayla direktifleri benim kod çalışıyor.

CEVAP
1 EYLÜL 2009, Salı


Bunu birçok kez yaptım ve bunu yapmaya devam edin. Birincil Amacınız okuma ve yazma çevirici değil nerede bu durumda bu geçerlidir hissediyorum.

Kendi çözücü yazın. Sonraki en büyük çözücü yapma amacıyla değil, bu kesinlikle sizin için. Hedef Yönerge kümesini öğrenmektir. İster yeni bir platform üzerinde çevirici, bir zamanlar tanıdığım bir platform için çevirici hatırlamak öğreniyorum. Kod sadece birkaç satır ile başlayın, örneğin kayıtları ekleme, ve ikili demontaj arasında pong-ping ıng çıkış ve giriş tarafında daha fazla ve daha karmaşık talimatları eklemek için:

1) bu talimat, belirli bir işlemci için ayarlamak öğrenin

2) işlemci dedi böyle birleştirmek için kod yazmak için nasıl nüansları her öğretim yılında her işlem kodu biraz kıpırdatmak öğrenin

3) Yönerge Bu yönerge seti yaşamlarını sürdürmek için kullandığı en mühendisleri o kadar öğrenirsiniz

Sizin durumunuzda birkaç sorun var, ben normalde KOL talimatı ile başlamak için önerim, herhangi bir başka ürün bugün sevk alarak daha fazla KOL (x 86 bilgisayarlar dahil) vardır. Ama şimdi KOL ve yeterince biliyor başlatma kodu veya diğer rutinleri yazmak için çevirici KOL bilmek dont kullandığınız ihtimali olabilir ya da yapmak için ne çalışıyorsunuz yardımcı olabilir. KOL için ikinci ve daha önemli nedeni, ilk öğretim uzunlukları boyutu sabit ve uyumlu olmasıdır. 86 gibi değişken uzunlukta talimatları sökülmesi ilk proje olarak bir kabus olabilir, ve burada amaç öğretim araştırma projesi oluşturmak için ayarlanmamış öğrenmektir. Üçüncü KOL aferin yönerge kümesi, kaydeder eşit yaratılmıştır ve dont bireysel özel nüanslar var.

Başlangıç için ne istediğine karar vermek zorunda kalacak. Msp430 veya KOL önce KOLUNU birinci veya ikinci 86 kaos sonra öneririm. Ne olursa olsun, platform, platform herhangi bir değer kullanarak bu veriler er ya da programcı başvuru kılavuzları ücretsiz satıcıyı içeren yönerge kümesi olarak kodlama işlem kodları (bit ve bayt makine dili). Amaçlı öğrenme ne derleyici ne kadar kod yazmak için derleyici hayrı için mücadele ile bunu bildiğim iyi oldu bir kaç komut setleri ve bakın nasıl aynı yüksek seviye kod uygulanan her komut seti ile her derleyici ile her optimizasyon ayarı. Dont sadece platform/bir derleyici için daha iyi ama diğer her için çok kötü oldu bulmak için kodunuzu optimize içine almak istiyorum.

Oh sökülmesi için değişken uzunlukta komut setleri yerine, sadece başlangıç başlangıç ve sökülmesi her dört bayt word doğrusal bellek gibi olur ile KOL ya da her iki bayt gibi msp430 (msp430 sahip değişken uzunlukta talimatları ama hala giderek doğrusal bellek başlarsan giriş noktalarından kesme vektörü tablo). Değişken uzunluğu için bir giriş noktası işlemci bot hakkında vektör tablo veya bilgiye dayalı Bul ve yürütme sipariş kodu takip etmek istiyorum. Bu talimat başka bir talimat sonra her talimat tamamen çözmek için kaç bayt eğer talimat sonraki bayt farz koşulsuz bir şube değilse o zaman nasıl kullanıldığını bilmen lazım. Olası tüm şube adresleri saklamak için ve o daha fazla talimat için başlangıç bayt adresi olduğunu varsayalım. Bir süre bu ikili ile birçok deneme yaptım başarılı oldum. Giriş noktasından başlayarak bir eğitim başlangıç koşulsuz bir şube vurmak kadar doğrusal olarak bellek ile sorunsuz olarak bayt işaretledim. Tüm şube hedefleri talimatı başlangıç adresi olarak etiketlendi. Yeni şube hedefleri bulmuştum kadar ikili üzerinden birden fazla geçiş yaptım. Eğer herhangi bir zamanda 3 bayt talimat söylüyorlar ama nedense bulursanız bir sorun var bir talimat başlangıcı olarak ikinci bayt etiketli var. Eğer bu kod tarafından oluşturulan bir üst düzey derleyici bu olmamalı etmedikçe derleyici yapmak kötü bir şey, eğer kodu olan El yazılı çevirici (dediği gibi eski bir Atari oyunu) oldukça mümkün olacak koşullu dallar bu asla olmayacak gibi r0=0 sonra bir sıçrama değilse sıfır. Elini devam etmek için bu ikili dışında şu düzenlemek zorunda kalabilirsiniz. 86 olacak sanıyorum ki yakın hedefler için ben bir sorun olacağını düşünüyorum.

Gcc araçları, mingw32 ise 86 hedef ise Windows gcc araçları kullanmak için kolay bir yol öneriyorum. Eğer mingw32 ayrıca msys binutils ve gcc kaynakları (genellikle çok kolay) ile çapraz derleyici oluşturmak için mükemmel bir platform oluşturuyor. mingw32 önemli ölçüde daha hızlı programlar gibi özellik listesi üzerinde bazı avantajları vardır ve özellik listesi dll cehennem kaçının. gcc ve binutils C veya çevirici yazmak ve kod ayrıştırmak için izin verir ve herhangi biri nasıl yapılacağını göstermek ya da üç tüm çok daha iyi bir web sayfaları var. Eğer değişken uzunlukta bir talimat seti ile bu işi yapacaksanız ben çok bir çözücü içeren tamir seti kullanmanızı öneririz. Örneğin, x 86 için üçüncü parti bir çözücü hiç doğru demonte varsa gerçekten bilmek olarak kullanmak için bir meydan okuma olacak. Bu işletim sistemi bağımlı bazıları da, amaç bilgi çözücü daha doğru bir iş yapmak, böylece veri işaretleme talimatları içeren ikili bir biçime modülleri derlemek için. Bu birincil amaç için diğer seçeneğin doğrudan muayene için ikili bir biçime derler aynı talimatları oluşturduğu umut çevirici derlemek için bir araç var.

Kısa (Tamam biraz daha kısa ) sorunun cevabı. Bir çözücü bir talimat seti yazmayı öğrenir. Bir şey RİSCy ve kolay KOL gibi öğrenmek ile başlamak istiyorum. Bir keresinde bir komut kümesi Diğerleri olmak çok daha kolay almak için, genellikle bir kaç saat, üçüncü komut kümesi başlayabilirsiniz kod yazma hemen kullanarak veri/başvuru kılavuzu için sözdizimi. Tüm işlemciler kullanarak değer olan işlem kodları bit ve bayt aşağı talimatları açıklayan bir veri sayfası veya referans El Kitabı. Öğrenmek bir RISC işlemci gibi KOL ve bir CISC gibi 86 alacak bir his farkları gibi şeyler olması için geçmesi kayıtları için her şey olmak ya da yapmak mümkün işlemlerini doğrudan bellek ile daha az ya da hiç kaydeder. Üç işlenen talimatları yerine iki, vb. Yüksek seviye kodunuzu ayarlamak, birden fazla işlemci için derleme ve çıktı karşılaştırmak gibi. Öğreneceğiniz en önemli şey ne kadar iyi ve yüksek seviye kod derleyici kalite ve optimizasyon yazılmış olursa olsun, seçimler gerçek talimatları büyük bir fark yaratabilir. Llvm ve gcc (binutils), ne üretmek öneririmharikakod, ama çoklu platform ve çoklu hedef vardır ve her ikisi de doktorları var. Ve hem ücretsiz ve kolayca farklı hedef işlemciler için kaynaklardan çapraz Derleyiciler oluşturabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DrePwn

    DrePwn

    22 Temmuz 2011
  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008