Different articles not yet ranked among any section.
In this article, I will describe steps needed to start on with development of real UEFI applications on x86 PC, and share some practical experiences with problems doing so. I will focus on 64-bit version of UEFI, because the 32-bit version isn't much used in this area (most likely due to Microsoft decision not to support UEFI in 32-bit Vista). So, to follow some of my steps here, you'll need a 64-bit CPU (but not 64-bit OS, you can use any 32-bit OS as well). We will finish this article with EFI Hello World application.
Improvements in Operating Systems security have created a race to "bare metal" between malware and protection software authors. Bare metal capabilities are defined as software or firmware applications that run outside the context of the OS and are therefore very powerful and difficult to detect. Hypervisors and SMM based rootkits are examples of bare metal capabilities. Because the digital battle ground is contracting, advantage goes to the one who can establish a presence there first.
In the beginning, there was BIOS (I assume reader knows what BIOS is). Back in those times, processors were running in 16-bit mode, and RAM was architecturally limited to 1 megabyte. As the evolution went forth, came 32-bit, and later 64-bit x86 CPUs, amount of RAM was increasing, and new ways of accessing it were being developed. But BIOS remained same. This situation was far from ideal, since BIOS code was very limited, and operating system loader had to load kernel just with using the most basic BIOS services, from 20 years ago. Creating new standard seemed impossible on such diverse market. But it was done anyway.
For many lowlevel programmers, object oriented programming (OOP) tends to be confusing and filled with abstractions. In this article I build up and explain some aspects of OOP from C or Assembly programmer's point of view.
As we all know, we shouldn't call BIOS from Windows drivers, and Windows officially doesn't support this. But recently, I was in situation where I had to do it, so I looked for some way how.
Many assembly programmers make linux applications using only syscalls, without glibc. Altough this way is usually considered bad practice, it is a fact.