Self-modifying code: Difference between revisions

Content deleted Content added
WL
Operating systems: If you're distinguishing between 32-bit and 64-bit x86, you should distinguish between 32-bit and 64-bit ARM as well.
Line 150:
 
===Operating systems===
The [[Linux kernel]] notably makes wide use of self-modifying code; it does so to be able to distribute a single binary image for each major architecture (e.g. x86[[IA-32]], [[x86-64]], 32-bit [[ARM architecture family|ARM]], [[ARM64]]...) while adapting the kernel code in memory during boot depending on the specific CPU model detected, e.g. to be able to take advantage of new CPU instructions or to work around hardware bugs.<ref name="linux_self_modifying_Paltsev">{{cite web |last1=Paltsev |first1=Evgeniy |title=Self Modifying Code in Linux Kernel - What, Where and How |url=https://talk.telematika.org/2019/all/self_modifying_code_in_linux_kernel_-_what_where_and_how/ |access-date=27 November 2022}}</ref><ref name="linux_self_modifying_altinstructions">{{cite web |last1=Wieczorkiewicz |first1=Pawel |title=Linux Kernel Alternatives |url=https://grsecurity.net/linux_kernel_alternatives |access-date=27 November 2022}}</ref>
 
Regardless, at a [[meta-level]], programs can still modify their own behavior by changing data stored elsewhere (see [[metaprogramming]]) or via use of [[type polymorphism|polymorphism]].