From: Jacek Podkanski Date: 2006-11-17T18:49:34+09:00 Subject: writing disassembler in Ruby --------------010708010506090808070606 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, This is my first post here. I am interested in writing a disassembler using Ruby. I have attached little example of my experiments with Ruby and ndisasm. Please comment on the code usefulness of it etc. do you know of any disassembler written in Ruby? Jacek --------------010708010506090808070606 Content-Type: application/x-ruby; name="deas.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="deas.rb" IyEgL3Vzci9iaW4vcnVieQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CiMgdGhpcyBwcm9ncmFtIHJlcXVpcmVzIG5kaXNhc20gdG8gYmUgaW50YWxsZWQgCiMgc29t ZXdoZXJlIGluIHRoZSBzaGVsbCAkUEFUSAojIHRoZXJlIGlzIG1vcmUgZXhwbGFuYXRpb24g d2hhdCBpdCBkb2VzIGFuZCBzYW1wbGUgb3V0cHV0IGF0IHRoZSBib3R0b20gb2YgdGhpcyBm aWxlCgpyZXF1aXJlICd0ZW1wZmlsZScKCmNsYXNzIE5kaXNhc20KCWF0dHJfcmVhZGVyIDpj b2RlCglkZWYgaW5pdGlhbGl6ZShieXRlcykgI2xpc3Qgb2YgYmluYXJ5IGNoYXJhY3RlcnMK CQl0Zmg9VGVtcGZpbGUubmV3KCdkaXNhc21fdGVtcCcsJy4nKQoJCXRmaC53cml0ZShieXRl cykKCQl0ZmguY2xvc2UoKQoKCQlvcHRpb25zPSctdScKCQl3eW5paz1gbmRpc2FzbSAje29w dGlvbnN9ICN7dGZoLnBhdGh9YC5zcGxpdCgiXG4iKQoJCQoJCXJlcz13eW5pa1swXQoJCXJl czI9cmVzWzEwLi4tMV0KCQlzcGk9cmVzMi5pbmRleCgnICcpCgkJY29kZT1yZXMyWzAuLnNw aV0uc3RyaXAKCQlAY29kZT1bXQoJCXg9MAoJCXdoaWxlIHg8IGNvZGUuc2l6ZQoJCQlAY29k ZSA8PCBjb2RlW3gsMl0KCQkJeCs9MgoJCWVuZCN3aGlsZQoJCUBtbmVtPXJlczJbc3BpLi4t MV0uc3RyaXAKCgkJdGZoLmRlbGV0ZQoJZW5kCglkZWYgc2hvdwoJCSNjb2Rlc3RyPScnCgkJ I0Bjb2RlLmVhY2h7fGN8IGNvZGVzdHIgPDwgYyA8PCAnICd9CgkJI3NwcmludGYoIiUgMmQg fCAlLTIxcyAlcyIsQGNvZGUuc2l6ZSxjb2Rlc3RyLEBtbmVtKQoJCXNwcmludGYoIiUgMmQg fCAlcyIsQGNvZGUuc2l6ZSxAbW5lbSkKCWVuZAplbmQKY2xhc3MgQXBwCglkZWYgaW5pdGlh bGl6ZShmbmFtZSx2c3RhcnQsZHN0YXJ0LCB2ZW5kKQoJCWZpbGU9Zm5hbWUKCQlAYnVmZmVy PUZpbGUub3BlbihmaWxlKS5yZWFkCgkJCgkJenp6KHZzdGFydCxkc3RhcnQsdmVuZCkKCWVu ZCNkZWYKCQoJZGVmIHp6eih2c3RhcnQsZHN0YXJ0LCB2ZW5kKQoJCQoJCXBvcz12c3RhcnQu aGV4CgkJbWFya2xpc3Q9W10KCQl6bmFrbGlzdD1bXQoJCTIxLnRpbWVze3x0fCBtYXJrbGlz dCA8PCBkc3RhcnQuaGV4K3QgOyB6bmFrbGlzdCA8PCAnficgfQoKCQkjdmVuZD1wb3MrNTAK CQl2ZW5kPXZlbmQuaGV4KzEKCQl2ZW5kPUBidWZmZXIuc2l6ZSBpZiB2ZW5kPkBidWZmZXIu c2l6ZQoJCXdoaWxlIHBvczx2ZW5kCgkJCWJ5dGVzPUBidWZmZXJbcG9zLDE3XQoJCQluZD1O ZGlzYXNtLm5ldyhieXRlcykKCQkJCgkJCWNoYXI9Jy4nCgkJCWNoYXI9QGJ1ZmZlcltwb3Ms MV0gaWYgQGJ1ZmZlcltwb3NdPj0zMiBhbmQgQGJ1ZmZlcltwb3NdIT0xNDIKCgkJCgkJCXg9 MAoJCQl3aGlsZSB4PG1hcmtsaXN0LnNpemUKCQkJCWlmIHBvcz09bWFya2xpc3RbeF0KCQkJ CQl6bmFrbGlzdFt4XT0nIycKCQkJCWVsc2UKCQkJCQl6bmFrbGlzdFt4XT0nKycKCQkJCWVu ZAoJCQkJeCs9MQoJCQllbmQKCQkJI3B1dHMgbWFya2xpc3QuaW5zcGVjdAoJCQkKCQkJem5z dHI9JycKCQkJem5ha2xpc3QuZWFjaHt8em58IHpuc3RyIDw8IHpufQoJCQlwcmludGYoIiUw OFggJTAyeCAlcyAlcyVzXG4iLHBvcyxAYnVmZmVyW3Bvc10sY2hhcix6bnN0cixuZC5zaG93 KQoJCQkKCQkJbWFya2xpc3QuZWFjaHt8bWFya3wgfQoJCQl4PTAKCQkJd2hpbGUgeDxtYXJr bGlzdC5zaXplCgkJCQltYXJrbGlzdFt4XSArPSBuZC5jb2RlLnNpemUgaWYgbWFya2xpc3Rb eF09PXBvcwoJCQkJeCs9MQoJCQllbmQKCQkJI3B1dHMgcG9zLnRvX3MrbWFya2xpc3QuaW5z cGVjdAoJCQlwb3MgKz0gMQoJCWVuZCN3aGlsZQoJZW5kIwoJCmVuZCNjbGFzcwoKQXBwLm5l dygkKlswXSwkKlsxXSwgJCpbMl0sJCpbM10pCgoKI2FyZ3VtZW50czogZmlsZSBuYW1lLCBz aHdvd19zdGFydCwgdHJ5X3N0YXJ0LCBzaG93X2VuZAo9YmVnaW4KCnRoaXMgaXMgc2FtcGxl IG91dHB1dCBmcm9tIHJ1bm5pbmcgYWJvdmUgY29kZQoKJCAuL2RlYXMucmIgL3Vzci9iaW4v Z25vbWUtc2NyZWVuc2hvdCA0OWUwIDQ5ZTIgNGEwMAoKIyBtZWFuIGZpcnN0IGJ5dGUgb2Yg YXNzZW1ibGVyIGluc3RydWN0aW9uCisgbWVhbiBzdWJzZXF1ZW50IGJ5dGVzIG9mIGFzc2Vt YmxlciBpbnN0cnVjdGlvbgoKMDAwMDQ5RTAgMzEgMSArKysrKysrKysrKysrKysrKysrKysg MiB8IHhvciBlYnAsZWJwCjAwMDA0OUUxIGVkIO+/vSArKysrKysrKysrKysrKysrKysrKysg MSB8IGluIGVheCxkeAowMDAwNDlFMiA1ZSBeICMrKysrKysrKysrKysrKysrKysrKyAxIHwg cG9wIGVzaQowMDAwNDlFMyA4OSDvv70gIyMrKysrKysrKysrKysrKysrKysrIDIgfCBtb3Yg ZWN4LGVzcAowMDAwNDlFNCBlMSDvv70gKysjKysrKysrKysrKysrKysrKysrIDIgfCBsb29w ZSAweGZmZmZmZjg1CjAwMDA0OUU1IDgzIO+/vSAjIysjKysrKysrKysrKysrKysrKysgMyB8 IGFuZCBlc3AsYnl0ZSAtMHgxMAowMDAwNDlFNiBlNCDvv70gKysjKyMrKysrKysrKysrKysr KysrIDIgfCBpbiBhbCwweGYwCjAwMDA0OUU3IGYwIO+/vSArKysrKyMrKysrKysrKysrKysr KysgMiB8IGxvY2sgcHVzaCBlYXgKMDAwMDQ5RTggNTAgUCAjIyMjIysjKysrKysrKysrKysr KysgMSB8IHB1c2ggZWF4CjAwMDA0OUU5IDU0IFQgIyMjIyMjIyMrKysrKysrKysrKysrIDEg fCBwdXNoIGVzcAowMDAwNDlFQSA1MiBSICMjIyMjIyMjIysrKysrKysrKysrKyAxIHwgcHVz aCBlZHgKMDAwMDQ5RUIgNjggaCAjIyMjIyMjIyMjKysrKysrKysrKysgNSB8IHB1c2ggZHdv cmQgMHg4MDUxNWMxCjAwMDA0OUVDIGMxIO+/vSArKysrKysrKysrIysrKysrKysrKysgNyB8 IHJjbCBkd29yZCBbMHg3MDY4MDgwNV0sMHgxNQowMDAwNDlFRCAxNSAuICsrKysrKysrKysr IysrKysrKysrKyA1IHwgYWRjIGVheCwweDcwNjgwODA1CjAwMDA0OUVFIDA1IC4gKysrKysr KysrKysrIysrKysrKysrIDUgfCBhZGQgZWF4LDB4MTU3MDY4MDgKMDAwMDQ5RUYgMDggLiAr KysrKysrKysrKysrIysrKysrKysgMyB8IG9yIFtlYXgrMHg3MF0sY2gKMDAwMDQ5RjAgNjgg aCAjIyMjIyMjIyMjKysrKyMrKysrKysgNSB8IHB1c2ggZHdvcmQgMHg4MDUxNTcwCjAwMDA0 OUYxIDcwIHAgKysrKysrKysrKysrKysrIysrKysrIDIgfCBqbyAweDE3CjAwMDA0OUYyIDE1 IC4gKysrKysrKysrKysjKyMrKyMrKysrIDUgfCBhZGMgZWF4LDB4NTY1MTA4MDUKMDAwMDQ5 RjMgMDUgLiArKysrKysrKysrIysjKysjKyMrKysgNSB8IGFkZCBlYXgsMHg2ODU2NTEwOAow MDAwNDlGNCAwOCAuICsrKysrKysrKysrKysrKysrKyMrKyAzIHwgb3IgW2VjeCsweDU2XSxk bAowMDAwNDlGNSA1MSBRICMjIyMjIyMjIyMrKysrIysrKysjKyAxIHwgcHVzaCBlY3gKMDAw MDQ5RjYgNTYgViAjIyMjIyMjIyMjKysrKyMrKysrIyMgMSB8IHB1c2ggZXNpCjAwMDA0OUY3 IDY4IGggIyMjIyMjIyMjIysjKyMjKyMrIyMjIDUgfCBwdXNoIGR3b3JkIDB4ODA0ZDE2Zgow MDAwNDlGOCA2ZiBvICsrKysrKysrKysjKyMrKyMrIysrKyAxIHwgb3V0c2QKMDAwMDQ5Rjkg ZDEg77+9ICsrKysrKysrKysjKyMrKyMrIysrKyAzIHwgcm9sIGR3b3JkIFtlYXgrZWN4XSwx CjAwMDA0OUZBIDA0IC4gKysrKysrKysrKysrKysrKysrKysrIDIgfCBhZGQgYWwsMHg4CjAw MDA0OUZCIDA4IC4gKysrKysrKysrKysrKysrKysrKysrIDIgfCBvciBhbCxjaAowMDAwNDlG QyBlOCDvv70gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIDUgfCBjYWxsIDB4ZmZmZmZiMGMKMDAw MDQ5RkQgMDcgLiArKysrKysrKysrKysrKysrKysrKysgMSB8IHBvcCBlcwowMDAwNDlGRSBm YiDvv70gKysrKysrKysrKysrKysrKysrKysrIDEgfCBzdGkKMDAwMDQ5RkYgZmYg77+9ICsr KysrKysrKysrKysrKysrKysrKyAxIHwgZGIgMHhGRgowMDAwNEEwMCBmZiDvv70gKysrKysr KysrKysrKysrKysrKysrIDIgfCBwdXNoIGVzcAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogCiAgICAgICAgIHxfX18gaGV4YWRlY2ltYWwgY29kZQogICAgICAg ICAgICAgCiAgICAgICAgICAgIHxfX18gYXNjaWkgY2hhcmFjdGVyIG9yICcuJwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX2xlbmd0aCBvZiBpbnN0cnVjdGlv biAoYnl0ZXMpICAgICAgICAgIAo9ZW5kCgo= --------------010708010506090808070606--