{"id":25373,"date":"2017-10-28T23:24:20","date_gmt":"2017-10-29T04:24:20","guid":{"rendered":"http:\/\/www.dannyadam.com\/blog\/?p=25373"},"modified":"2017-10-30T22:21:49","modified_gmt":"2017-10-31T03:21:49","slug":"echo-and-printenv-in-x86-assembly","status":"publish","type":"post","link":"https:\/\/www.dannyadam.com\/blog\/2017\/10\/echo-and-printenv-in-x86-assembly\/","title":{"rendered":"<em>echo<\/em> and <em>printenv<\/em> in x86 Assembly"},"content":{"rendered":"<p>This post contains implementations of <em>echo<\/em> and <em>printenv<\/em> in 32-bit x86 assembly for Linux.<\/p>\n<p><em>echo<\/em> is a Unix utility that prints its arguments to standard output.<\/p>\n<p><em>printenv<\/em> is a Unix utility that prints the environment to standard output.<\/p>\n<p>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\u00a0<em>main<\/em>.<\/p>\n<ul>\n<li><a href=\"https:\/\/gist.github.com\/dstein64\/0eff27ecc06fa1349e390b4459ffb841\">echo.c<\/a><\/li>\n<li><a href=\"https:\/\/gist.github.com\/dstein64\/86d7d6444e80d150a5f826e809ba7384\">printenv.c<\/a><\/li>\n<\/ul>\n<p>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.<\/p>\n<pre>        |--------------------------|     Low\r\n0(%esp) |      Argument Count      |  Addresses\r\n        |--------------------------|\r\n4(%esp) |     Argument Pointers    |\r\n        |           ...            |\r\n        |--------------------------|\r\n        |            0             |\r\n        |--------------------------|\r\n        |   Environment Pointers   |\r\n        |           ...            |\r\n        |--------------------------|\r\n        |            0             |\r\n        |--------------------------|\r\n        |     Additional Data      |\r\n        |           ...            |     High\r\n        |--------------------------|  Addresses\r\n<\/pre>\n<p><!--more-->The stack grows downward in memory. That is, the <em>top<\/em> of the stack has the lowest memory address. When a program is executed, the top of the process stack contains 1) the argument count (conventionally referred to as <em>argc<\/em> in source code), followed by 2) pointers to the argument strings, 3) zero, 4) pointers to the environment strings, 5) zero, and 6) additional data (including the data that the argument\/environment pointers reference).<\/p>\n<p><em>echo<\/em> and <em>printenv<\/em> can be implemented in assembly language by traversing the stack and printing out the relevant strings.<\/p>\n<h2>Helper Functions<\/h2>\n<p>Both assembly programs have a helper macro, <em>print<\/em>, for writing to standard output. They also share a helper function, <em>strlen<\/em>, which returns the length of a string.<\/p>\n<style>.gist table { margin-bottom: 0; }<\/style>\n<div style=\"tab-size: 8\" id=\"gist82486106\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container\">\n<div id=\"file-helpers-s\" class=\"file my-2\">\n<div itemprop=\"text\"\n      class=\"Box-body p-0 blob-wrapper data type-unix-assembly  \"\n      style=\"overflow: auto\" tabindex=\"0\" role=\"region\"\n      aria-label=\"helpers.s content, created by dstein64 on 03:50AM on October 29, 2017.\"\n    ><\/p>\n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n<p>  <template class=\"js-file-alert-template\"><\/p>\n<div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n    <span><br \/>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br \/>\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a><br \/>\n    <\/span><\/p>\n<div data-view-component=\"true\" class=\"flash-action\">        <a href=\"{{ revealButtonHref }}\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters<br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><\/template><br \/>\n<template class=\"js-line-alert-template\"><br \/>\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\"><br \/>\n    <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n<\/span><\/template><\/p>\n<table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"helpers.s\">\n<tr>\n<td id=\"file-helpers-s-L1\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"1\"><\/td>\n<td id=\"file-helpers-s-LC1\" class=\"blob-code blob-code-inner js-file-line\">  .section .text<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L2\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"2\"><\/td>\n<td id=\"file-helpers-s-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L3\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"3\"><\/td>\n<td id=\"file-helpers-s-LC3\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L4\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"4\"><\/td>\n<td id=\"file-helpers-s-LC4\" class=\"blob-code blob-code-inner js-file-line\"># * print macro<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L5\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"5\"><\/td>\n<td id=\"file-helpers-s-LC5\" class=\"blob-code blob-code-inner js-file-line\"># * Caller is responsible for setting<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L6\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"6\"><\/td>\n<td id=\"file-helpers-s-LC6\" class=\"blob-code blob-code-inner js-file-line\"># * %ecx and %edx, and saving %eax and<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L7\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"7\"><\/td>\n<td id=\"file-helpers-s-LC7\" class=\"blob-code blob-code-inner js-file-line\"># * %ebx if necessary.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L8\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"8\"><\/td>\n<td id=\"file-helpers-s-LC8\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L9\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"9\"><\/td>\n<td id=\"file-helpers-s-LC9\" class=\"blob-code blob-code-inner js-file-line\">.macro print<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L10\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"10\"><\/td>\n<td id=\"file-helpers-s-LC10\" class=\"blob-code blob-code-inner js-file-line\">  movl $4, %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L11\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"11\"><\/td>\n<td id=\"file-helpers-s-LC11\" class=\"blob-code blob-code-inner js-file-line\">  movl $1, %ebx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L12\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"12\"><\/td>\n<td id=\"file-helpers-s-LC12\" class=\"blob-code blob-code-inner js-file-line\">  int $0x80<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L13\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"13\"><\/td>\n<td id=\"file-helpers-s-LC13\" class=\"blob-code blob-code-inner js-file-line\">.endm<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L14\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"14\"><\/td>\n<td id=\"file-helpers-s-LC14\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L15\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"15\"><\/td>\n<td id=\"file-helpers-s-LC15\" class=\"blob-code blob-code-inner js-file-line\">  .section .text<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L16\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"16\"><\/td>\n<td id=\"file-helpers-s-LC16\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L17\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"17\"><\/td>\n<td id=\"file-helpers-s-LC17\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L18\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"18\"><\/td>\n<td id=\"file-helpers-s-LC18\" class=\"blob-code blob-code-inner js-file-line\"># * int strlen(char* str);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L19\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"19\"><\/td>\n<td id=\"file-helpers-s-LC19\" class=\"blob-code blob-code-inner js-file-line\"># * Returns the length of a string.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L20\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"20\"><\/td>\n<td id=\"file-helpers-s-LC20\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L21\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"21\"><\/td>\n<td id=\"file-helpers-s-LC21\" class=\"blob-code blob-code-inner js-file-line\">  .type strlen, @function<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L22\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"22\"><\/td>\n<td id=\"file-helpers-s-LC22\" class=\"blob-code blob-code-inner js-file-line\">strlen:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L23\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"23\"><\/td>\n<td id=\"file-helpers-s-LC23\" class=\"blob-code blob-code-inner js-file-line\">  pushl %ebp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L24\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"24\"><\/td>\n<td id=\"file-helpers-s-LC24\" class=\"blob-code blob-code-inner js-file-line\">  movl  %esp, %ebp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L25\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"25\"><\/td>\n<td id=\"file-helpers-s-LC25\" class=\"blob-code blob-code-inner js-file-line\">  movl  $0, %eax           # Index<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L26\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"26\"><\/td>\n<td id=\"file-helpers-s-LC26\" class=\"blob-code blob-code-inner js-file-line\">  movl  8(%ebp), %ecx      # Address of str<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L27\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"27\"><\/td>\n<td id=\"file-helpers-s-LC27\" class=\"blob-code blob-code-inner js-file-line\">strlen_loop:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L28\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"28\"><\/td>\n<td id=\"file-helpers-s-LC28\" class=\"blob-code blob-code-inner js-file-line\">  movb  (%ecx,%eax,1), %dl # Current char<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L29\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"29\"><\/td>\n<td id=\"file-helpers-s-LC29\" class=\"blob-code blob-code-inner js-file-line\">  cmpb  $0, %dl<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L30\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"30\"><\/td>\n<td id=\"file-helpers-s-LC30\" class=\"blob-code blob-code-inner js-file-line\">  je    strlen_end<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L31\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"31\"><\/td>\n<td id=\"file-helpers-s-LC31\" class=\"blob-code blob-code-inner js-file-line\">  incl  %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L32\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"32\"><\/td>\n<td id=\"file-helpers-s-LC32\" class=\"blob-code blob-code-inner js-file-line\">  jmp   strlen_loop<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L33\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"33\"><\/td>\n<td id=\"file-helpers-s-LC33\" class=\"blob-code blob-code-inner js-file-line\">strlen_end:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L34\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"34\"><\/td>\n<td id=\"file-helpers-s-LC34\" class=\"blob-code blob-code-inner js-file-line\">  movl  %ebp, %esp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L35\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"35\"><\/td>\n<td id=\"file-helpers-s-LC35\" class=\"blob-code blob-code-inner js-file-line\">  popl  %ebp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-helpers-s-L36\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"36\"><\/td>\n<td id=\"file-helpers-s-LC36\" class=\"blob-code blob-code-inner js-file-line\">  ret<\/td>\n<\/tr>\n<\/table>\n<\/div><\/div>\n<\/p><\/div>\n<\/div><\/div>\n<div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/dstein64\/eda0edbdce6c83f8495bcd057daad57c\/raw\/ef528a9ddff0d55fbd4727cfc52a700df19c6aef\/helpers.s\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a><br \/>\n        <a href=\"https:\/\/gist.github.com\/dstein64\/eda0edbdce6c83f8495bcd057daad57c#file-helpers-s\" class=\"Link--inTextBlock\"><br \/>\n          helpers.s<br \/>\n        <\/a><br \/>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n<\/p><\/div>\n<\/div>\n<h2><em>echo<\/em> Assembly Code<\/h2>\n<p>The assembly code for <em>echo<\/em>\u00a0iterates over the argument pointers on the stack, printing the string corresponding to each argument. The iteration starts at the second element on the stack (past the first element, <em>argument count<\/em>), and stops when reaching a zero.<\/p>\n<style>.gist table { margin-bottom: 0; }<\/style>\n<div style=\"tab-size: 8\" id=\"gist82486122\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container\">\n<div id=\"file-echo_partial-s\" class=\"file my-2\">\n<div itemprop=\"text\"\n      class=\"Box-body p-0 blob-wrapper data type-unix-assembly  \"\n      style=\"overflow: auto\" tabindex=\"0\" role=\"region\"\n      aria-label=\"echo_partial.s content, created by dstein64 on 03:52AM on October 29, 2017.\"\n    ><\/p>\n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n<p>  <template class=\"js-file-alert-template\"><\/p>\n<div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n    <span><br \/>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br \/>\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a><br \/>\n    <\/span><\/p>\n<div data-view-component=\"true\" class=\"flash-action\">        <a href=\"{{ revealButtonHref }}\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters<br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><\/template><br \/>\n<template class=\"js-line-alert-template\"><br \/>\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\"><br \/>\n    <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n<\/span><\/template><\/p>\n<table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"echo_partial.s\">\n<tr>\n<td id=\"file-echo_partial-s-L1\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"1\"><\/td>\n<td id=\"file-echo_partial-s-LC1\" class=\"blob-code blob-code-inner js-file-line\">\/*** echo.s ***\/<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L2\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"2\"><\/td>\n<td id=\"file-echo_partial-s-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L3\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"3\"><\/td>\n<td id=\"file-echo_partial-s-LC3\" class=\"blob-code blob-code-inner js-file-line\">\/\/ Description<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L4\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"4\"><\/td>\n<td id=\"file-echo_partial-s-LC4\" class=\"blob-code blob-code-inner js-file-line\">\/\/   echo &#8211; print arguments to stdout<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L5\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"5\"><\/td>\n<td id=\"file-echo_partial-s-LC5\" class=\"blob-code blob-code-inner js-file-line\">\/\/ Synopsis<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L6\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"6\"><\/td>\n<td id=\"file-echo_partial-s-LC6\" class=\"blob-code blob-code-inner js-file-line\">\/\/   echo [STRING]&#8230;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L7\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"7\"><\/td>\n<td id=\"file-echo_partial-s-LC7\" class=\"blob-code blob-code-inner js-file-line\">\/\/ Build<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L8\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"8\"><\/td>\n<td id=\"file-echo_partial-s-LC8\" class=\"blob-code blob-code-inner js-file-line\">\/\/   $ as &#8211;32 -o echo.o echo.s<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L9\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"9\"><\/td>\n<td id=\"file-echo_partial-s-LC9\" class=\"blob-code blob-code-inner js-file-line\">\/\/   $ ld -m elf_i386 -o echo echo.o<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L10\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"10\"><\/td>\n<td id=\"file-echo_partial-s-LC10\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L11\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"11\"><\/td>\n<td id=\"file-echo_partial-s-LC11\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L12\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"12\"><\/td>\n<td id=\"file-echo_partial-s-LC12\" class=\"blob-code blob-code-inner js-file-line\"># * print macro and strlen function<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L13\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"13\"><\/td>\n<td id=\"file-echo_partial-s-LC13\" class=\"blob-code blob-code-inner js-file-line\"># * are omitted.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L14\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"14\"><\/td>\n<td id=\"file-echo_partial-s-LC14\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L15\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"15\"><\/td>\n<td id=\"file-echo_partial-s-LC15\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L16\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"16\"><\/td>\n<td id=\"file-echo_partial-s-LC16\" class=\"blob-code blob-code-inner js-file-line\">  .section .rodata<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L17\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"17\"><\/td>\n<td id=\"file-echo_partial-s-LC17\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L18\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"18\"><\/td>\n<td id=\"file-echo_partial-s-LC18\" class=\"blob-code blob-code-inner js-file-line\">newline_char:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L19\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"19\"><\/td>\n<td id=\"file-echo_partial-s-LC19\" class=\"blob-code blob-code-inner js-file-line\">  .ascii &quot;\\n&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L20\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"20\"><\/td>\n<td id=\"file-echo_partial-s-LC20\" class=\"blob-code blob-code-inner js-file-line\">space_char:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L21\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"21\"><\/td>\n<td id=\"file-echo_partial-s-LC21\" class=\"blob-code blob-code-inner js-file-line\">  .ascii &quot; &quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L22\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"22\"><\/td>\n<td id=\"file-echo_partial-s-LC22\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L23\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"23\"><\/td>\n<td id=\"file-echo_partial-s-LC23\" class=\"blob-code blob-code-inner js-file-line\">  .section .text<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L24\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"24\"><\/td>\n<td id=\"file-echo_partial-s-LC24\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L25\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"25\"><\/td>\n<td id=\"file-echo_partial-s-LC25\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L26\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"26\"><\/td>\n<td id=\"file-echo_partial-s-LC26\" class=\"blob-code blob-code-inner js-file-line\"># * echo [STRING]&#8230; <\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L27\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"27\"><\/td>\n<td id=\"file-echo_partial-s-LC27\" class=\"blob-code blob-code-inner js-file-line\"># * Prints the string(s) to stdout.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L28\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"28\"><\/td>\n<td id=\"file-echo_partial-s-LC28\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L29\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"29\"><\/td>\n<td id=\"file-echo_partial-s-LC29\" class=\"blob-code blob-code-inner js-file-line\">  .globl _start<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L30\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"30\"><\/td>\n<td id=\"file-echo_partial-s-LC30\" class=\"blob-code blob-code-inner js-file-line\">_start:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L31\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"31\"><\/td>\n<td id=\"file-echo_partial-s-LC31\" class=\"blob-code blob-code-inner js-file-line\">  movl  %esp, %ebp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L32\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"32\"><\/td>\n<td id=\"file-echo_partial-s-LC32\" class=\"blob-code blob-code-inner js-file-line\">  # Local variables (offset from %ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L33\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"33\"><\/td>\n<td id=\"file-echo_partial-s-LC33\" class=\"blob-code blob-code-inner js-file-line\">  .equ  index, -4           # Stack index being operated on<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L34\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"34\"><\/td>\n<td id=\"file-echo_partial-s-LC34\" class=\"blob-code blob-code-inner js-file-line\">  .equ  address, -8         # Current arg address<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L35\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"35\"><\/td>\n<td id=\"file-echo_partial-s-LC35\" class=\"blob-code blob-code-inner js-file-line\">  .equ  length, -12         # Current arg length<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L36\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"36\"><\/td>\n<td id=\"file-echo_partial-s-LC36\" class=\"blob-code blob-code-inner js-file-line\">  subl  $12, %esp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L37\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"37\"><\/td>\n<td id=\"file-echo_partial-s-LC37\" class=\"blob-code blob-code-inner js-file-line\">  # Start at index 1 (this skips argc)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L38\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"38\"><\/td>\n<td id=\"file-echo_partial-s-LC38\" class=\"blob-code blob-code-inner js-file-line\">  movl  $1, index(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L39\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"39\"><\/td>\n<td id=\"file-echo_partial-s-LC39\" class=\"blob-code blob-code-inner js-file-line\">echo_loop:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L40\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"40\"><\/td>\n<td id=\"file-echo_partial-s-LC40\" class=\"blob-code blob-code-inner js-file-line\">  # Set address local variable<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L41\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"41\"><\/td>\n<td id=\"file-echo_partial-s-LC41\" class=\"blob-code blob-code-inner js-file-line\">  movl  index(%ebp), %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L42\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"42\"><\/td>\n<td id=\"file-echo_partial-s-LC42\" class=\"blob-code blob-code-inner js-file-line\">  movl  4(%ebp, %ecx, 4), %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L43\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"43\"><\/td>\n<td id=\"file-echo_partial-s-LC43\" class=\"blob-code blob-code-inner js-file-line\">  movl  %eax, address(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L44\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"44\"><\/td>\n<td id=\"file-echo_partial-s-LC44\" class=\"blob-code blob-code-inner js-file-line\">  # Check if we&#39;re done (reached a NULL pointer)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L45\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"45\"><\/td>\n<td id=\"file-echo_partial-s-LC45\" class=\"blob-code blob-code-inner js-file-line\">  cmpl  $0, address(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L46\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"46\"><\/td>\n<td id=\"file-echo_partial-s-LC46\" class=\"blob-code blob-code-inner js-file-line\">  je    echo_loop_end<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L47\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"47\"><\/td>\n<td id=\"file-echo_partial-s-LC47\" class=\"blob-code blob-code-inner js-file-line\">  # Calculate length of string<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L48\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"48\"><\/td>\n<td id=\"file-echo_partial-s-LC48\" class=\"blob-code blob-code-inner js-file-line\">  pushl address(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L49\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"49\"><\/td>\n<td id=\"file-echo_partial-s-LC49\" class=\"blob-code blob-code-inner js-file-line\">  call  strlen<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L50\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"50\"><\/td>\n<td id=\"file-echo_partial-s-LC50\" class=\"blob-code blob-code-inner js-file-line\">  addl  $4, %esp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L51\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"51\"><\/td>\n<td id=\"file-echo_partial-s-LC51\" class=\"blob-code blob-code-inner js-file-line\">  # Set length local variable<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L52\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"52\"><\/td>\n<td id=\"file-echo_partial-s-LC52\" class=\"blob-code blob-code-inner js-file-line\">  movl  %eax, length(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L53\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"53\"><\/td>\n<td id=\"file-echo_partial-s-LC53\" class=\"blob-code blob-code-inner js-file-line\">  # Print leading space if index &gt; 1<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L54\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"54\"><\/td>\n<td id=\"file-echo_partial-s-LC54\" class=\"blob-code blob-code-inner js-file-line\">  cmpl  $1, index(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L55\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"55\"><\/td>\n<td id=\"file-echo_partial-s-LC55\" class=\"blob-code blob-code-inner js-file-line\">  jle   leading_space_end<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L56\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"56\"><\/td>\n<td id=\"file-echo_partial-s-LC56\" class=\"blob-code blob-code-inner js-file-line\">  movl  $space_char, %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L57\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"57\"><\/td>\n<td id=\"file-echo_partial-s-LC57\" class=\"blob-code blob-code-inner js-file-line\">  movl  $1, %edx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L58\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"58\"><\/td>\n<td id=\"file-echo_partial-s-LC58\" class=\"blob-code blob-code-inner js-file-line\">  print<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L59\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"59\"><\/td>\n<td id=\"file-echo_partial-s-LC59\" class=\"blob-code blob-code-inner js-file-line\">leading_space_end:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L60\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"60\"><\/td>\n<td id=\"file-echo_partial-s-LC60\" class=\"blob-code blob-code-inner js-file-line\">  # Print current argument<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L61\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"61\"><\/td>\n<td id=\"file-echo_partial-s-LC61\" class=\"blob-code blob-code-inner js-file-line\">  movl  address(%ebp), %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L62\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"62\"><\/td>\n<td id=\"file-echo_partial-s-LC62\" class=\"blob-code blob-code-inner js-file-line\">  movl  length(%ebp), %edx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L63\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"63\"><\/td>\n<td id=\"file-echo_partial-s-LC63\" class=\"blob-code blob-code-inner js-file-line\">  print<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L64\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"64\"><\/td>\n<td id=\"file-echo_partial-s-LC64\" class=\"blob-code blob-code-inner js-file-line\">  incl  index(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L65\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"65\"><\/td>\n<td id=\"file-echo_partial-s-LC65\" class=\"blob-code blob-code-inner js-file-line\">  jmp   echo_loop<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L66\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"66\"><\/td>\n<td id=\"file-echo_partial-s-LC66\" class=\"blob-code blob-code-inner js-file-line\">echo_loop_end:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L67\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"67\"><\/td>\n<td id=\"file-echo_partial-s-LC67\" class=\"blob-code blob-code-inner js-file-line\">  # Print newline char<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L68\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"68\"><\/td>\n<td id=\"file-echo_partial-s-LC68\" class=\"blob-code blob-code-inner js-file-line\">  movl  $newline_char, %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L69\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"69\"><\/td>\n<td id=\"file-echo_partial-s-LC69\" class=\"blob-code blob-code-inner js-file-line\">  movl  $1, %edx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L70\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"70\"><\/td>\n<td id=\"file-echo_partial-s-LC70\" class=\"blob-code blob-code-inner js-file-line\">  print<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L71\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"71\"><\/td>\n<td id=\"file-echo_partial-s-LC71\" class=\"blob-code blob-code-inner js-file-line\">  # Exit<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L72\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"72\"><\/td>\n<td id=\"file-echo_partial-s-LC72\" class=\"blob-code blob-code-inner js-file-line\">  movl  $1, %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L73\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"73\"><\/td>\n<td id=\"file-echo_partial-s-LC73\" class=\"blob-code blob-code-inner js-file-line\">  movl  $0, %ebx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L74\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"74\"><\/td>\n<td id=\"file-echo_partial-s-LC74\" class=\"blob-code blob-code-inner js-file-line\">  int   $0x80<\/td>\n<\/tr>\n<tr>\n<td id=\"file-echo_partial-s-L75\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"75\"><\/td>\n<td id=\"file-echo_partial-s-LC75\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<\/table>\n<\/div><\/div>\n<\/p><\/div>\n<\/div><\/div>\n<div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/dstein64\/41a533756457f1c34572c4c1bece38be\/raw\/6268192473c9bd1e48b3d278380d0b1c5ff99aa5\/echo_partial.s\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a><br \/>\n        <a href=\"https:\/\/gist.github.com\/dstein64\/41a533756457f1c34572c4c1bece38be#file-echo_partial-s\" class=\"Link--inTextBlock\"><br \/>\n          echo_partial.s<br \/>\n        <\/a><br \/>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n<\/p><\/div>\n<\/div>\n<p>The full source code for <em>echo<\/em>, including the <em>print<\/em> macro and <em>strlen<\/em> function, is available at <a href=\"https:\/\/gist.github.com\/dstein64\/890e02e8e277f17d931c8a250ceaaf44\">https:\/\/gist.github.com\/dstein64\/890e02e8e277f17d931c8a250ceaaf44<\/a>.<\/p>\n<h2><em>printenv<\/em> Assembly Code<\/h2>\n<p>The assembly code for <em>printenv<\/em> is similar to the code above for\u00a0<em>echo<\/em>, but starts iteration a few elements deeper into the stack, at the first environment variable pointer. It uses the <em>argument count<\/em> on the stack to jump past the argument pointers.<\/p>\n<style>.gist table { margin-bottom: 0; }<\/style>\n<div style=\"tab-size: 8\" id=\"gist82486342\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container\">\n<div id=\"file-printenv_partial-s\" class=\"file my-2\">\n<div itemprop=\"text\"\n      class=\"Box-body p-0 blob-wrapper data type-unix-assembly  \"\n      style=\"overflow: auto\" tabindex=\"0\" role=\"region\"\n      aria-label=\"printenv_partial.s content, created by dstein64 on 04:03AM on October 29, 2017.\"\n    ><\/p>\n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n<p>  <template class=\"js-file-alert-template\"><\/p>\n<div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n    <span><br \/>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br \/>\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a><br \/>\n    <\/span><\/p>\n<div data-view-component=\"true\" class=\"flash-action\">        <a href=\"{{ revealButtonHref }}\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters<br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><\/template><br \/>\n<template class=\"js-line-alert-template\"><br \/>\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\"><br \/>\n    <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n<\/span><\/template><\/p>\n<table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"printenv_partial.s\">\n<tr>\n<td id=\"file-printenv_partial-s-L1\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"1\"><\/td>\n<td id=\"file-printenv_partial-s-LC1\" class=\"blob-code blob-code-inner js-file-line\">\/*** printenv.s ***\/<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L2\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"2\"><\/td>\n<td id=\"file-printenv_partial-s-LC2\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L3\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"3\"><\/td>\n<td id=\"file-printenv_partial-s-LC3\" class=\"blob-code blob-code-inner js-file-line\">\/\/ Description<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L4\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"4\"><\/td>\n<td id=\"file-printenv_partial-s-LC4\" class=\"blob-code blob-code-inner js-file-line\">\/\/   printenv &#8211; print the environment to stdout<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L5\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"5\"><\/td>\n<td id=\"file-printenv_partial-s-LC5\" class=\"blob-code blob-code-inner js-file-line\">\/\/ Synopsis<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L6\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"6\"><\/td>\n<td id=\"file-printenv_partial-s-LC6\" class=\"blob-code blob-code-inner js-file-line\">\/\/   printenv<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L7\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"7\"><\/td>\n<td id=\"file-printenv_partial-s-LC7\" class=\"blob-code blob-code-inner js-file-line\">\/\/ Build<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L8\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"8\"><\/td>\n<td id=\"file-printenv_partial-s-LC8\" class=\"blob-code blob-code-inner js-file-line\">\/\/   $ as &#8211;32 -o printenv.o printenv.s<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L9\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"9\"><\/td>\n<td id=\"file-printenv_partial-s-LC9\" class=\"blob-code blob-code-inner js-file-line\">\/\/   $ ld -m elf_i386 -o printenv printenv.o<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L10\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"10\"><\/td>\n<td id=\"file-printenv_partial-s-LC10\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L11\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"11\"><\/td>\n<td id=\"file-printenv_partial-s-LC11\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L12\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"12\"><\/td>\n<td id=\"file-printenv_partial-s-LC12\" class=\"blob-code blob-code-inner js-file-line\"># * print macro and strlen function<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L13\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"13\"><\/td>\n<td id=\"file-printenv_partial-s-LC13\" class=\"blob-code blob-code-inner js-file-line\"># * are omitted.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L14\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"14\"><\/td>\n<td id=\"file-printenv_partial-s-LC14\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L15\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"15\"><\/td>\n<td id=\"file-printenv_partial-s-LC15\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L16\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"16\"><\/td>\n<td id=\"file-printenv_partial-s-LC16\" class=\"blob-code blob-code-inner js-file-line\">  .section .rodata<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L17\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"17\"><\/td>\n<td id=\"file-printenv_partial-s-LC17\" class=\"blob-code blob-code-inner js-file-line\">newline_char:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L18\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"18\"><\/td>\n<td id=\"file-printenv_partial-s-LC18\" class=\"blob-code blob-code-inner js-file-line\">  .ascii &quot;\\n&quot;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L19\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"19\"><\/td>\n<td id=\"file-printenv_partial-s-LC19\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L20\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"20\"><\/td>\n<td id=\"file-printenv_partial-s-LC20\" class=\"blob-code blob-code-inner js-file-line\">  .section .text<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L21\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"21\"><\/td>\n<td id=\"file-printenv_partial-s-LC21\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L22\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"22\"><\/td>\n<td id=\"file-printenv_partial-s-LC22\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L23\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"23\"><\/td>\n<td id=\"file-printenv_partial-s-LC23\" class=\"blob-code blob-code-inner js-file-line\"># * printenv<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L24\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"24\"><\/td>\n<td id=\"file-printenv_partial-s-LC24\" class=\"blob-code blob-code-inner js-file-line\"># * Prints the environment to stdout.<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L25\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"25\"><\/td>\n<td id=\"file-printenv_partial-s-LC25\" class=\"blob-code blob-code-inner js-file-line\"># ************************************<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L26\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"26\"><\/td>\n<td id=\"file-printenv_partial-s-LC26\" class=\"blob-code blob-code-inner js-file-line\">  .globl _start<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L27\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"27\"><\/td>\n<td id=\"file-printenv_partial-s-LC27\" class=\"blob-code blob-code-inner js-file-line\">_start:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L28\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"28\"><\/td>\n<td id=\"file-printenv_partial-s-LC28\" class=\"blob-code blob-code-inner js-file-line\">  movl  %esp, %ebp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L29\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"29\"><\/td>\n<td id=\"file-printenv_partial-s-LC29\" class=\"blob-code blob-code-inner js-file-line\">  # Local variables (offset from %ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L30\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"30\"><\/td>\n<td id=\"file-printenv_partial-s-LC30\" class=\"blob-code blob-code-inner js-file-line\">  .equ  index, -4          # Stack index being operated on<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L31\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"31\"><\/td>\n<td id=\"file-printenv_partial-s-LC31\" class=\"blob-code blob-code-inner js-file-line\">  .equ  address, -8        # Current env var address<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L32\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"32\"><\/td>\n<td id=\"file-printenv_partial-s-LC32\" class=\"blob-code blob-code-inner js-file-line\">  .equ  length, -12        # Current env var length<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L33\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"33\"><\/td>\n<td id=\"file-printenv_partial-s-LC33\" class=\"blob-code blob-code-inner js-file-line\">  subl  $12, %esp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L34\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"34\"><\/td>\n<td id=\"file-printenv_partial-s-LC34\" class=\"blob-code blob-code-inner js-file-line\">  # Start at index argc+1 (this skips the argument vector)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L35\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"35\"><\/td>\n<td id=\"file-printenv_partial-s-LC35\" class=\"blob-code blob-code-inner js-file-line\">  movl  $0, index(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L36\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"36\"><\/td>\n<td id=\"file-printenv_partial-s-LC36\" class=\"blob-code blob-code-inner js-file-line\">  movl  (%ebp), %eax       # argc<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L37\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"37\"><\/td>\n<td id=\"file-printenv_partial-s-LC37\" class=\"blob-code blob-code-inner js-file-line\">  incl  %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L38\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"38\"><\/td>\n<td id=\"file-printenv_partial-s-LC38\" class=\"blob-code blob-code-inner js-file-line\">  addl  %eax, index(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L39\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"39\"><\/td>\n<td id=\"file-printenv_partial-s-LC39\" class=\"blob-code blob-code-inner js-file-line\">printenv_loop:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L40\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"40\"><\/td>\n<td id=\"file-printenv_partial-s-LC40\" class=\"blob-code blob-code-inner js-file-line\">  # Set address local variable<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L41\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"41\"><\/td>\n<td id=\"file-printenv_partial-s-LC41\" class=\"blob-code blob-code-inner js-file-line\">  movl  index(%ebp), %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L42\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"42\"><\/td>\n<td id=\"file-printenv_partial-s-LC42\" class=\"blob-code blob-code-inner js-file-line\">  movl  4(%ebp, %ecx, 4), %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L43\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"43\"><\/td>\n<td id=\"file-printenv_partial-s-LC43\" class=\"blob-code blob-code-inner js-file-line\">  movl  %eax, address(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L44\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"44\"><\/td>\n<td id=\"file-printenv_partial-s-LC44\" class=\"blob-code blob-code-inner js-file-line\">  # Check if we&#39;re done (reached a NULL pointer)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L45\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"45\"><\/td>\n<td id=\"file-printenv_partial-s-LC45\" class=\"blob-code blob-code-inner js-file-line\">  cmpl  $0, address(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L46\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"46\"><\/td>\n<td id=\"file-printenv_partial-s-LC46\" class=\"blob-code blob-code-inner js-file-line\">  je    printenv_loop_end<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L47\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"47\"><\/td>\n<td id=\"file-printenv_partial-s-LC47\" class=\"blob-code blob-code-inner js-file-line\">  # Calculate length of string<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L48\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"48\"><\/td>\n<td id=\"file-printenv_partial-s-LC48\" class=\"blob-code blob-code-inner js-file-line\">  pushl address(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L49\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"49\"><\/td>\n<td id=\"file-printenv_partial-s-LC49\" class=\"blob-code blob-code-inner js-file-line\">  call  strlen<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L50\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"50\"><\/td>\n<td id=\"file-printenv_partial-s-LC50\" class=\"blob-code blob-code-inner js-file-line\">  addl  $4, %esp<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L51\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"51\"><\/td>\n<td id=\"file-printenv_partial-s-LC51\" class=\"blob-code blob-code-inner js-file-line\">  # Set length local variable<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L52\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"52\"><\/td>\n<td id=\"file-printenv_partial-s-LC52\" class=\"blob-code blob-code-inner js-file-line\">  movl  %eax, length(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L53\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"53\"><\/td>\n<td id=\"file-printenv_partial-s-LC53\" class=\"blob-code blob-code-inner js-file-line\">  # Print current env var<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L54\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"54\"><\/td>\n<td id=\"file-printenv_partial-s-LC54\" class=\"blob-code blob-code-inner js-file-line\">  movl  address(%ebp), %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L55\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"55\"><\/td>\n<td id=\"file-printenv_partial-s-LC55\" class=\"blob-code blob-code-inner js-file-line\">  movl  length(%ebp), %edx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L56\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"56\"><\/td>\n<td id=\"file-printenv_partial-s-LC56\" class=\"blob-code blob-code-inner js-file-line\">  print<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L57\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"57\"><\/td>\n<td id=\"file-printenv_partial-s-LC57\" class=\"blob-code blob-code-inner js-file-line\">  # Print newline char<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L58\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"58\"><\/td>\n<td id=\"file-printenv_partial-s-LC58\" class=\"blob-code blob-code-inner js-file-line\">  movl  $newline_char, %ecx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L59\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"59\"><\/td>\n<td id=\"file-printenv_partial-s-LC59\" class=\"blob-code blob-code-inner js-file-line\">  movl  $1, %edx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L60\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"60\"><\/td>\n<td id=\"file-printenv_partial-s-LC60\" class=\"blob-code blob-code-inner js-file-line\">  print<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L61\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"61\"><\/td>\n<td id=\"file-printenv_partial-s-LC61\" class=\"blob-code blob-code-inner js-file-line\">  incl  index(%ebp)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L62\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"62\"><\/td>\n<td id=\"file-printenv_partial-s-LC62\" class=\"blob-code blob-code-inner js-file-line\">  jmp printenv_loop<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L63\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"63\"><\/td>\n<td id=\"file-printenv_partial-s-LC63\" class=\"blob-code blob-code-inner js-file-line\">printenv_loop_end:<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L64\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"64\"><\/td>\n<td id=\"file-printenv_partial-s-LC64\" class=\"blob-code blob-code-inner js-file-line\">  # Exit<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L65\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"65\"><\/td>\n<td id=\"file-printenv_partial-s-LC65\" class=\"blob-code blob-code-inner js-file-line\">  movl  $1, %eax<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L66\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"66\"><\/td>\n<td id=\"file-printenv_partial-s-LC66\" class=\"blob-code blob-code-inner js-file-line\">  movl  $0, %ebx<\/td>\n<\/tr>\n<tr>\n<td id=\"file-printenv_partial-s-L67\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"67\"><\/td>\n<td id=\"file-printenv_partial-s-LC67\" class=\"blob-code blob-code-inner js-file-line\">  int   $0x80<\/td>\n<\/tr>\n<\/table>\n<\/div><\/div>\n<\/p><\/div>\n<\/div><\/div>\n<div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/dstein64\/6a853776e84fd491475b7a9db6a47a2b\/raw\/74762a4a3c2ac14480b05ac073bf0d34e3e25c5b\/printenv_partial.s\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a><br \/>\n        <a href=\"https:\/\/gist.github.com\/dstein64\/6a853776e84fd491475b7a9db6a47a2b#file-printenv_partial-s\" class=\"Link--inTextBlock\"><br \/>\n          printenv_partial.s<br \/>\n        <\/a><br \/>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n<\/p><\/div>\n<\/div>\n<p>The full source code for <em>printenv<\/em>, including the <em>print<\/em> macro and <em>strlen<\/em> function, is available at <a href=\"https:\/\/gist.github.com\/dstein64\/a52146a3c6a12c8c0b84cfd4e084bb15\">https:\/\/gist.github.com\/dstein64\/a52146a3c6a12c8c0b84cfd4e084bb15<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[52,53,55,54,33],"class_list":["post-25373","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-assembly","tag-echo","tag-linux","tag-printenv","tag-unix"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1sCC6-6Bf","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/posts\/25373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/comments?post=25373"}],"version-history":[{"count":32,"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/posts\/25373\/revisions"}],"predecessor-version":[{"id":25409,"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/posts\/25373\/revisions\/25409"}],"wp:attachment":[{"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/media?parent=25373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/categories?post=25373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dannyadam.com\/blog\/wp-json\/wp\/v2\/tags?post=25373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}