open System
let ImageBase = 0x400000
let SectionAlignment = 4096
let FileAlignment = 512
let Align v a = ((v + a - 1) / a) * a
type Section = { Name:string; Size:int }
let Sections = [ { Name = "Header"; Size = 500}
{ Name = ".text" ; Size = 5000}
{ Name = ".data" ; Size = 10000}
{ Name = ".idata"; Size = 2000} ]
let mutable rva = 0
let mutable off = 0
for section in Sections do
printfn "%-8s Size=%08x, Addr=%08x, RVA=%08x, File Offset=%08x"
section.Name section.Size (ImageBase + rva) rva off
rva <- Align section.Size SectionAlignment
off <- Align section.Size FileAlignment
ignore <| Console.ReadLine()
b3BlbiBTeXN0ZW0KCmxldCBJbWFnZUJhc2UgICAgICAgID0gMHg0MDAwMDAKbGV0IFNlY3Rpb25BbGlnbm1lbnQgPSA0MDk2CmxldCBGaWxlQWxpZ25tZW50ICAgID0gNTEyCgpsZXQgQWxpZ24gdiBhID0gKCh2ICsgYSAtIDEpIC8gYSkgKiBhCgp0eXBlIFNlY3Rpb24gPSB7IE5hbWU6c3RyaW5nOyBTaXplOmludCB9CgpsZXQgU2VjdGlvbnMgPSBbIHsgTmFtZSA9ICJIZWFkZXIiOyBTaXplID0gICA1MDB9CiAgICAgICAgICAgICAgICAgeyBOYW1lID0gIi50ZXh0IiA7IFNpemUgPSAgNTAwMH0KICAgICAgICAgICAgICAgICB7IE5hbWUgPSAiLmRhdGEiIDsgU2l6ZSA9IDEwMDAwfQogICAgICAgICAgICAgICAgIHsgTmFtZSA9ICIuaWRhdGEiOyBTaXplID0gIDIwMDB9IF0KCmxldCBtdXRhYmxlIHJ2YSA9IDAKbGV0IG11dGFibGUgb2ZmID0gMApmb3Igc2VjdGlvbiBpbiBTZWN0aW9ucyBkbwogIHByaW50Zm4gIiUtOHMgU2l6ZT0lMDh4LCBBZGRyPSUwOHgsIFJWQT0lMDh4LCBGaWxlIE9mZnNldD0lMDh4IiAKICAgIHNlY3Rpb24uTmFtZSBzZWN0aW9uLlNpemUgKEltYWdlQmFzZSArIHJ2YSkgcnZhIG9mZgogIHJ2YSA8LSBBbGlnbiBzZWN0aW9uLlNpemUgU2VjdGlvbkFsaWdubWVudAogIG9mZiA8LSBBbGlnbiBzZWN0aW9uLlNpemUgRmlsZUFsaWdubWVudAoKaWdub3JlIDx8IENvbnNvbGUuUmVhZExpbmUoKQ==
Header Size=000001f4, Addr=00400000, RVA=00000000, File Offset=00000000
.text Size=00001388, Addr=00401000, RVA=00001000, File Offset=00000200
.data Size=00002710, Addr=00402000, RVA=00002000, File Offset=00001400
.idata Size=000007d0, Addr=00403000, RVA=00003000, File Offset=00002800