Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I make a portable executable?

It's there a way to compile a c/c++ source file to output a .exe file that can be run on other processors on different computers ? I am asking this for windows platform. I know it can be done with java or c# , but it uses virtual machine.

PS: For those who said that it can be done just with virtual machines or the source cod must be compiled on every machine , i am asking if all viruses are written in java or c# and you need a vm machine to be infected or you need to compile source cod of worm on your machine to be infected ? (i am not trying to make a virus, but is a good example :) )

like image 566
Stefan Avatar asked Nov 03 '10 11:11

Stefan


People also ask

Are EXE files portable?

The Portable Executable format is the standard file format for executables, object code and Dynamic Link Libraries (DLLs) used in 32- and 64-bit versions of Windows operating systems.

How is an executable made?

A compiler takes the program code (source code) and converts the source code to a machine language module (called an object file). Another specialized program, called a linker, combines this object file with other previously compiled object files (in particular run-time modules) to create an executable file.

Which of the following is a Portable Executable examples?

Explanation: The Portable Executable is the basic file format which main objective to used the 32- and 64-bit versions of the Microsoft systems for the exe files, obj fiie, and the DLL library.

Can an executable run on any computer?

Some executable file types can run on any compatible system without requiring the existence of another program. These files are considered to pose a high security risk. They include EXE, BAT, COM, CMD, INF, IPA, OSX, PIF, RUN and WSH. With Windows, EXE is the file extension for an executable file.


2 Answers

Different computers use different instruction sets, OS system calls, etc., which is why machine code is platform specific. This is why various technologies like byte code, virtual machines, etc., have been developed to allow portable executables. However, generally C/C++ compiles directly to platform-specific machine code.

So a Windows exe simply won't run on another platform without some kind of emulation layer.

However, you can make your C/C++ source code portable. This means all you need to do to make your application run on another platform is to compile it for that platform.

like image 157
Charles Salvia Avatar answered Sep 25 '22 00:09

Charles Salvia


Yes, you can, but it's not necessarily a good idea.

Apple introduced the idea of a fat binary when they were migrating from the Motorola 68000 to the PowerPC chips back in the early 90s (I'm not saying they invented it, that's just the earliest incarnation I know of). That link also describes the FatELF Linux universal binaries but, given how little we hear about them, they don't seem to have taken off.

This was a single file which basically contained both the 68000 and PowerPc executables bundled into one single file and required some smarts from the operating system so it could load and execute the relevant one.

You could, if you were so inclined, write a compiler which produced a fat binary that would run on a great many platforms but:

  • it would be hideously large; and
  • it would almost certainly require special loaders on each target system.

Since gcc has such a huge amount of support for different platforms and cross-compiling, it would be where I would concentrate the effort, were I mad enough to try :-)

like image 27
paxdiablo Avatar answered Sep 23 '22 00:09

paxdiablo