This post contains implementations of echo and printenv in 32-bit x86 assembly for Linux.
echo is a Unix utility that prints its arguments to standard output.
printenv is a Unix utility that prints the environment to standard output.
The core functionality of these programs can be written in a few lines of C, where program arguments and the environment are passed as function arguments to main.
When a process is executed on Linux (or other Unix-like systems), its stack contains pointers to the program arguments and the environment, as shown below.
|--------------------------| Low 0(%esp) | Argument Count | Addresses |--------------------------| 4(%esp) | Argument Pointers | | ... | |--------------------------| | 0 | |--------------------------| | Environment Pointers | | ... | |--------------------------| | 0 | |--------------------------| | Additional Data | | ... | High |--------------------------| Addresses