Minor fixes to 2001/anonymous/README.md

This commit is contained in:
Cody Boone Ferguson committed 2023-05-25 11:14:38 -07:00
1 parent cf44ff9c91
commit e268529397
1 file changed
+15 -14
+15 -14
View File
@@ -19,21 +19,21 @@ make
supplementary program and the program itself (both of which segfaulted and once supplementary program and the program itself (both of which segfaulted and once
that was fixed only the binary was modified; it was not run but according to the that was fixed only the binary was modified; it was not run but according to the
author's remarks it should be executed). He managed to do this with linux author's remarks it should be executed). He managed to do this with linux
but it will not work with macOS (see [bugs.md](/bugs.md) for why this is); this but it will not work with macOS (see [bugs.md](/bugs.md) for why this is); _this
is not a bug but a feature inherent in what it does. is not a bug, it's a feature_ inherent in what it does!
Although it took a fair bit of debugging it turns out all that had to change The following had to be done in order to get this to work:
was:
- `#include <sys/mman.h>` for `mmap()` and `munmap()`. - `#include <sys/mman.h>` for `mmap()` and `munmap()`.
- have `main()` call another function which is no longer a recursive function; - have `main()` call another function which is no longer a recursive function;
this prevented `main()` from entering an infinite recursive loop. this prevented `main()` from entering an infinite recursive loop.
Without either of these it would crash and prevent modification of the 32-bit Without either of these it would crash and prevent modification of the 32-bit
[ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) (not elf :-) [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) (not elf :-) )
) binary. But again see [bugs.md](/bugs.md) here. The following change was also binary. But again see [bugs.md](/bugs.md) here.
made to be more portable, in case the constants `PROT_READ` and/or `PROT_WRITE`
are not standardised: The following change was also made to be more portable, in case the constants
`PROT_READ` and/or `PROT_WRITE` are not standardised:
Change `3` in the call to `mmap()` to be `PROT_READ|PROT_WRITE`: just in case Change `3` in the call to `mmap()` to be `PROT_READ|PROT_WRITE`: just in case
`PROT_READ|PROT_WRITE` does not equal 3 (though it seems to be equal in both `PROT_READ|PROT_WRITE` does not equal 3 (though it seems to be equal in both
@@ -42,12 +42,13 @@ macOS and linux).
There was one other thing that had to be done though. Since the program used to There was one other thing that had to be done though. Since the program used to
recursively call (infinite recursion, seemingly) `main()` and since that cannot recursively call (infinite recursion, seemingly) `main()` and since that cannot
be done what had to be done instead is after the new function (`pain()` since it be done what had to be done instead is after the new function (`pain()` since it
was a pain to fix :-) ) returns to first call `munmap()` and `close()` (else was a pain to fix :-) ) returns to first call `munmap()` and `close()` (else one
one would get text file busy error) and then the program can call `execv()` again like the would get text file busy error) and then the program can call `execv()` again
function `pain()` (was in `main()`) did but with a slight change. See commit like the function `pain()` (was in `main()`) did but with a slight change. See
`2159caec4677e0f25ad704a74e04c8196fd6c343` for details. Notice that commit `2159caec4677e0f25ad704a74e04c8196fd6c343` for more details.
the location of the calls to `munmap()` and `close()` followed by `execv()` do
matter! Notice that the location of the calls to `munmap()` and `close()` followed by
`execv()` _does matter_!
NOTE: there might be educational value to see the progress of this fix; if you NOTE: there might be educational value to see the progress of this fix; if you
wish to see, try: wish to see, try: