Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Basic question regarding ROM based executable

I have basic doubt regarding executable stored in ROM.

As I know the executable with text and RO attributes is stored in ROM. Question is as ROM is for Read Only Memory, what happens if there is situation where the code needs to write into memory?

I am not able to conjure up any example to cite here (probably I am ignorant of such situation or I am missing out basic stuff ;) but any light on this topic can greatly help me to understand! :)

Last off - 1. Is there any such situation? 2. In such a case is copying the code from ROM to RAM is the answer?

Answer with some example can greatly help..

Many thanks in advance!

/MS

like image 296
MS. Avatar asked Jul 05 '10 15:07

MS.


People also ask

How exe are loaded into memory?

For a program to execute as a process, it has to be loaded into memory via a program loader. The executable file that contains the program consists of several sections that identify different regions of the program and where they should be loaded into memory.

Is code stored in ROM?

ROM is physical memory which can store data or program code but cannot be written to. Read-only segments are chunks of memory where the MMU is configured to prevent writes.

Can we run program directly if I have executables of C# in any OS?

Yes it's possible, providing the other computer has a . net framework version installed that matches the requirements of your software, you can ship the application via creating an MSI with a setup or via sending the exe and any dlls required from within the bin directory created during compilation.

How executable code is generated?

Assemblers generate executable code from assembly language programs. The generated code is usually loaded into the flash program memory of the target microcontroller. Similarly, compilers generate executable code from high-level language programs.


2 Answers

Read-only memory is read only because of hardware restrictions. The program might be in an EEPROM, flash memory protected from writes, a CD-ROM, or anything where the hardware physically disallows writing. If software writes to ROM, the hardware is incapable of changing the stored data, so nothing happens.

So if a software program in ROM wants to write to memory, it writes to RAM. That's the only option. If a program is running from ROM and wants to change itself, it can't because it can't write to ROM. But yes, the program can run from RAM.

In fact, running from ROM is rare except in the smallest embedded systems. Operating systems copy executable code from ROM to RAM before running it. Sometimes code is compressed in ROM and must be decompressed into RAM before running. If RAM is full, the operating system uses paging to manage it. The reason running from ROM is so rare is because ROM is slower than RAM and sometimes code needs to be changed by the loader before running.

Note that if you have code that modifies itself, you really have to know your system. Many systems use data-execution prevention (DEP). Executable code goes in read+execute areas of RAM. Data goes in read+write areas. So on these systems, code can never change itself in RAM.

like image 165
indiv Avatar answered Nov 10 '22 06:11

indiv


Normally only program code, constants and initialisation data are stored in ROM. A separate memory area in RAM is used for stack, heap, etc.

like image 42
Paul R Avatar answered Nov 10 '22 07:11

Paul R