flat assembler
Message board for the users of flat assembler.

flat assembler > DOS > bootstrapping FASM?

Author
Thread Post new topic Reply to topic
rugxulo



Joined: 09 Aug 2005
Posts: 2279
Location: Usono (aka, USA)
Someone in another subforum here (re: making a FASM package for Gentoo) mentioned the idea of bootstrapping FASM.

To me, the simplest way is to use an old DOS .COM version of FASM to build a newer version and then ultimately use that to build the latest version.

So, if someone really "needed" (wanted?) to bootstrap FASM from something else (NASM?), all they'd have to do is convert the ancient .COM version and go on from there.

Of course, that's not directly useful to Gentoo, obviously, but it's not hard to setup some kind of DOS-compatible environment.

And yes, I know, totally pointless since it's obvious that FASM can (and should) continue to build itself. I'm not paranoid enough to worry about The Ken Thompson Hack. To me, it's fairly obvious that FASM does only what it implies.

Code:
@echo off REM ... bootstrapping FASM from other asm? here's where to start ... for %%a in (140 164 172) do unzip -q fasm%%a -d fasm%%a -x *.exe *.com *.sys unzip -qj fasm140 SOURCE\DOS\FASM.COM cd fasm164\source\dos gsed -i -e "1i\salc equ setalc" ..\formats.inc gsed -i -e "1i\macro align value{rb(value-1)-($+value-1)mod value}" fasm.asm ..\..\..\fasm.com fasm.asm f1.exe >NUL f1.exe fasm.asm f2.exe >NUL echo. echo (FASM 1.64) unzip -qqv ..\..\..\fasm164.zip fasm.exe | awk "{print $8,toupper($7)}" crc32 f2.exe REM 5DAC0852 echo. cd ..\..\..\fasm172\source\dos echo short equ byte>oldshort.inc gsed -i -e "1i\include 'oldshort.inc'" modes.inc ..\..\..\fasm164\source\dos\f2.exe fasm.asm f3.exe >NUL echo. >oldshort.inc f3.exe fasm.asm good.exe >NUL echo. echo (FASM 1.72) unzip -qqv ..\..\..\fasm172.zip fasm.exe | awk "{print $8,toupper($7)}" crc32 good.exe REM 5F7C1ECC echo. cd ..\..\.. rm -rf fasm140 fasm164 fasm172 rm -f fasm.com
Post 20 Feb 2018, 05:08
View user's profile Send private message Visit poster's website Reply with quote
Furs



Joined: 04 Mar 2016
Posts: 1172
If someone was paranoid then yeah, this actually makes sense, surely DOSBox is available in Gentoo as well. (I honestly don't care that much about "official distro repositories" though)
Post 20 Feb 2018, 13:10
View user's profile Send private message Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 15870
Location: 162173 Ryugu
It is actually quite easy to disassemble the binary and compare to the sources. And if you are really good with awk/sed/etc then it could even be automated. That might make for an interesting project for someone to make an automated verification tool.
Post 21 Feb 2018, 06:20
View user's profile Send private message Visit poster's website Reply with quote
rugxulo



Joined: 09 Aug 2005
Posts: 2279
Location: Usono (aka, USA)
revolution wrote:
It is actually quite easy to disassemble the binary and compare to the sources.


You mean .COM? Obviously that's about as simple as you can get, (almost) raw binary. That was my point, it's somewhat easier than using ELF and a linker.

But various potential complications can occur (self-modifying code, cpu-specific code, data put between code instead of only in one place, etc). So disassembly isn't always simple.

Also, x86 is variable-length, which complicates things. So if you change one instruction, all the other displacements get adjusted accordingly. So it's hard to disassemble two similar binaries, even if they only differ in length of common JMPs (two bytes or three?).

Maybe comparing (partial) listing would suffice? Nope, not if it doesn't simplify / unify / normalize basic forms, not counting other complex stuff.

revolution wrote:

And if you are really good with awk/sed/etc then it could even be automated. That might make for an interesting project for someone to make an automated verification tool.


In what way? I did make a simple script to compare PSR Invaders .COM, using NDISASM + AWK to avoid the raw opcodes and only compare actual (100% equivalent) instructions. "mov cx,ax" (8B C8) vs. "mov cx,ax" (89 C1), etc.

Of course, FASM and NASM share most opcodes, so that's less of a problem here. They are usually identical output. (I did sometimes find one rare quirk difference in YASM, though.)

I don't think anyone here really wants me to convert it to NASM for us. But it would be an interesting, albeit pointless, task.
Post 22 Feb 2018, 00:03
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 15870
Location: 162173 Ryugu
Compare by disassembled instructions, that is, the text output from the disassembler compared to the text input from the source. It really isn't that hard to do if one has the need. But if there is no need then it is just either a waste of time or a learning opportunity for someone. For a one-off job then comparing by sight will be a bit tedious but quite doable.

Even a really simple instruction count comparison can give a lot of confidence that there are no unexpected bad things in there. It would be really really hard to keep the instruction count the same but at the same time have it altered in some way to make it do bad things. In fact so hard that I would almost discount it as not worth worrying about unless you have some extra special need where a more thorough investigation is warranted. Or if you are bored one day.

Note that my definition of "bad things" above covers a lot of situations. Like deliberate meddling, bad encoding, corrupted bits, missing instructions, duplicated instructions, etc.
Post 22 Feb 2018, 08:50
View user's profile Send private message Visit poster's website Reply with quote
Tomasz Grysztar
Assembly Artist


Joined: 16 Jun 2003
Posts: 6872
Location: Kraków, Poland
You could use fasmg to bootstrap fasm, even providing your own copy of x86 macros. Since everything is a macro then, the instruction handlers could be easily modified so that they would collect additional statistics and/or checksums that could then be used to verify the generated file.
Post 22 Feb 2018, 13:13
View user's profile Send private message Visit poster's website Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >

Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 2004-2018, Tomasz Grysztar.

Powered by rwasa.