I have the source code of an old program written in 32-bit x86 assembler that I am working on manually rewriting in C.

The first time someone asked me about this project I told them I was 'reverse engineering' this code. But I thought to myself afterwards, am I really doing any reverse engineering here? even if I have the source code? and even if its in x86? and commented somewhat?

I mean I am still using the same re tools to help me navigate and understand this thing but even so, is 'reverse engineering' the right thing to say?

I am perhaps overthinking this but in any case, what would you call it?

  • 1
    Translating to a modern programming language?
    – mkst
    Sep 1 '20 at 7:08
  • That depends on the code. If it is free of comments and may be even slightly "obfuscated (non-speaking variable/function names, ..) one could call that reverse engineering in my opinion as you are trying to get the intention behind the code.
    – Robert
    Sep 1 '20 at 9:28

The IEEE definition of Reverse Engineering ("Reverse Engineering and Design Recovery: A Taxonomy", IEEE, 1990) is "the process of analyzing a subject system to identify the system's components and their interrelationships and to create representations of the system in another form or at a higher level of abstraction".

However, you already have the source code which is a representation of the system (an executable) in another form and at a higher level of abstraction (assembly).

To me, what you are doing is re-engineering and/or translating the source code by porting it to a new software coding language.


You should check the EFF RE FAQ. It might help you wrap your head around some of the legal aspects and definitions.

From where I see it, yes, it is reverse engineering. But, it's not clean room reverse engineering.

There are many layers/levels of RE. You can target the hardware, the firmware, the software, the algorithms, the architecture, ... The higher you go, the more abstract the construct. So, depending on what abstraction you're trying to model from the available elements, the RE tools and methods will be, somewhat, different. But, it's still RE.

I would define RE by the attempt to build a higher level construct from a set of packaged, or obfuscated, or low level elements.

If you start from a binary without any prior knowledge of its inner-workings and dig your way into a source code, that's clean room binary RE for the intent of producing a source code. If you peruse (in the true sense of the word) the source code and manage to identify the algorithms (some homemade implementation of FFT, AES, or some scheduling scheme), that becomes a clean room algorithm RE.

If you have prior knowledge of the source code and you manage to identify the algorithms, that's algorithm RE. Is this case, the manner in which the source code was obtained is crucial in defining the legality of the RE work and the intent of the RE.

If you are learning by playing around with prepared labs/exercises, well, you're working out your RE skills.

  • The OP did not say what country he/she is in. The EFF RE FAQ assumes work is being done in the USA, and does not apply in non-US countries.
    – fpmurphy
    Sep 11 '20 at 14:43
  • Sure, but it is still a good reference to understand how RE is defined/considered.
    – yaspr
    Sep 12 '20 at 13:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.