OK, I know I'm very late to the party! However I just noticed that our web
log shows a recent entry for visitor who reached our site via this thread,
so I'll add this comment in case anyone else follows...
You can do much better than obtaining a "flow of program" as suggested by
the previous post, although it's tricky to do so.
Our company, MicroAPL, has a software tool called Relogix which
reverse-engineers assembly code and produces C. We aim to get close to what
a human programmer might write - i.e. readable, maintainable code.
To judge how well we do, take a look at some of the examples on our web
site. These are all automatic translations produced by Relogix, before our
engineers perform a post-translation cleanup.
The link is:
http://www.microapl.co.uk/asm2c/index.html
>
>
>booth multiplier wrote:
>
>> hamilton <hamilton@deminsional.com> wrote in message
news:<MvKdnZE4LcI-bsjfRVn-ow@forethought.net>...
>>
>>>I would like to know whose code are you trying to steal ???
>>
>>
>> This is not about stealing nor converting machine language to C. Its
>> about upgrading and Education.
>
>If you were an educator, you would already understand compiler theory.
>
>Getting the "original" C code from assembly in not possible.
>
>The best you can get is a (dare I say it) is a flow of the program.
>
> From there you can 're-engineer' the code in C.
>
>My guess is that you are not an educator.
>
> hamilton <hamilton@deminsional.com> wrote in message news:<MvKdnZE4LcI-bsjfRVn-ow@forethought.net>...
>
>>I would like to know whose code are you trying to steal ???
>
>
> This is not about stealing nor converting machine language to C. Its
> about upgrading and Education.
If you were an educator, you would already understand compiler theory.
Getting the "original" C code from assembly in not possible.
The best you can get is a (dare I say it) is a flow of the program.
From there you can 're-engineer' the code in C.
My guess is that you are not an educator.
>Hi All,
> Has anybody heard of an assembly to C converter tool for Microchip
>PICs. A Converter from MPASM to C, or is it impossible?
>Thanks
Relogix (http://www.microapl.co.uk/asm2c/index.html) performs
assembler-to-C tranlation for 680x0 and 80x86 CPUs. The vendor offers
porting services for other architectures.
--
Dan Henry
Reply by John●April 8, 20052005-04-08
> > 1. Students who start with C and want to use HANDWRITTEN Assembly
> > Examples on the Net.
>
> Students are much better off doing that conversion manually ---
> they'll learn a great deal about that particular C compiler,
assembler
> and micro in the process, which is what being a student is supposedly
> all about.
I'm a student and I'd get confused as ever going from assembler to C. I
tried that eons ago with Z80 stuff and it's a confusing bloated layer
of bizzaro labels and gotos. Don't foist that upon your students unless
you want them to leave.
Much better, as Hans said, is to learn assembler, learn C, and how to
convert from one to another. I'm trying C2Cplus (formerly picant) and
it will generate heavily commented (corresponding to C source)
assembler (their SourceboostC steps in C source) which makes
comparisons between C and assembler easy, and for newbies,
enlightening.
I don't know squat about 16F assembler, but at 35 instructions, it's
not bad. It is actually fun (only 35 instructions) to examine small
listings to see how people solve problems. It could likely be essential
to learn and write assembler for certain projects.
> Why would they ever want to do that? If the assembly program was
Portability?
Reply by Hans-Bernhard Broeker●April 8, 20052005-04-08
> The tool will help:
> 1. Students who start with C and want to use HANDWRITTEN Assembly
> Examples on the Net.
Students are much better off doing that conversion manually ---
they'll learn a great deal about that particular C compiler, assembler
and micro in the process, which is what being a student is supposedly
all about.
> 2. Assembly coders who want to upgrade their code to C.
Why would they ever want to do that? If the assembly program was
written by people worthy of being called "assembly coders", odds are
that a direct translation to C would be vastly inferior to a plain
rewrite from scratch.
In other words, the only tools actually *needed* for such a conversion
are lots of documentation, time and a screen large enough to display C
and assembly source side-by-side. Or failing the latter, a paper
print-out holder to sit next to the screen.
--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.
Reply by booth multiplier●April 8, 20052005-04-08
hamilton <hamilton@deminsional.com> wrote in message news:<MvKdnZE4LcI-bsjfRVn-ow@forethought.net>...
> I would like to know whose code are you trying to steal ???
This is not about stealing nor converting machine language to C. Its
about upgrading and Education.
The tool will help:
1. Students who start with C and want to use HANDWRITTEN Assembly
Examples on the Net.
2. Assembly coders who want to upgrade their code to C.
Is this not worth asking for?
Thanks Anyway
Reply by hamilton●April 8, 20052005-04-08
I would like to know whose code are you trying to steal ???
Reply by Ben Bradley●April 7, 20052005-04-07
On 5 Apr 2005 00:35:56 -0700, boothmultipler@hotmail.com (booth
multiplier) wrote:
>Hi All,
> Has anybody heard of an assembly to C converter tool for Microchip
>PICs. A Converter from MPASM to C, or is it impossible?
This thread seems to be arguing over what's possible (and what you
describe IS called a decompiler), but there's plenty of info on Usenet
as well as the Web, as you'll find if you search for:
assembly C decompiler
(see weblinks below)
My short-to-medium answer is yes, sort of, it's possible for a
program to read a particular assembly (or equivalently, machine)
language and spit out a C program that does the same thing, but: 1)
the code compiled from that C program will surely be larger and slower
than the original machine/assembly code, and 2) it may not really be
any more readable than the assembly code. Code such as this (6502):
ldx 10d
label005:
jsr sub003
dex
bne label005
through a decompiler might look like this:
int register_x;
register_x = 10;
label005:
sub003();
registerx--;
if (registerx != 0)
goto label005;
You rarely see labels and goto's in C, but that would be the most
straightforward (easiest for the decompiler writer) way of translating
it. Such a translator could generate 'for' and 'while' statements, but
that would mean recognizing several assembly statements as being
equivalent to such a high-level statement. Such things can be done
(this might be called an 'optimizing deompiler', but it might be only
marginally helpful.
If your assembly is hand-written with comments and labels that make
sense in the context of the program, a decompiler could (and should)
pick these up and put them in the appropriate places of the C code.
Google searches bring up lots of threads and discussion, mostly for
x86, though I saw a mention of 8051. I didn't look specifically for
PIC. Many references were about writing such a decompiler such as this
one:
http://compilers.iecc.com/comparch/article/86-04-001
Here's a neat webpage showing 'original' C code on the left and
after compiling and running through the decompiler, apparently for
x86:
http://www.debugmode.com/dcompile/disc.htm
Does that (the C code on the right) look like the kind of output
you were thinking of?
If you think that's usable, do a search-engine search for a PIC
decompiler.
Send me a private email with contact information. We may be able to help you.
w..
booth multiplier wrote:
> I meant something like this:
> > movlw 0x8
> > movwf count
> transforms to:
>
> count=8;
Reply by Tauno Voipio●April 7, 20052005-04-07
booth multiplier wrote:
> I meant something like this:
>
>> movlw 0x8
>> movwf count
>
> transforms to:
>
> count=8;
>
> I was asking for a MPASM to C translator not for a Decompiler. I
> thought it would be not so hard as MPASM has a specific Syntax.
>
All C compilers convert the code via assembly language.
The stage may not be externally viewable, but it's there
anyway. This is the compilation process. It loses very
much information of the original C code, and all the
information cannot be automatically restored.
The process of converting from machine code (hex, binary,
or whatever format) to assembly language is much simpler,
and it can be for the most part performed automatically.
This process is usually called dis-assembly. Even here
much of the information in the original code is missing
and has to be manually re-created.
The specific syntax and semantics of assembly language
helps very little in the whole picture of re-creating
the lost information needed to reconstruct the C source.
Your example is one of the easiest parts in a decompilation
process. Try again with some optimized loops with array
addressing to see the larger picture. The whole decompilation
process is like solving a cross-word puzzle.
Been there - done that.
--
Tauno Voipio
tauno voipio (at) iki fi