32 bit processes on a 64 bit kernel apparently have a full 4G address space, the kernel sits at the end of the (inaccessible for 32 bit processes) 64 bit address space. as you can see here:
cat uses the full 4G space to map libraries, heap, stack.
these days it's nearly impossible to buy a pc without 64 bit capability and if in doubt you can use a normal 32 bit userspace on a 64 bit kernel.
btw, why did the original developer choose to hardcode the addresses in the code? it is much more readable to at lease use constants for that, eg. BASE=0xd000000, COMMAND=BASE+0x123, etc. someone decided to write unmaintainable code, here, and now you have to clean up the mess.
64 bit kernel
32 bit processes on a 64 bit kernel apparently have a full 4G address space, the kernel sits at the end of the (inaccessible for 32 bit processes) 64 bit address space. as you can see here:
cat uses the full 4G space to map libraries, heap, stack.
these days it's nearly impossible to buy a pc without 64 bit capability and if in doubt you can use a normal 32 bit userspace on a 64 bit kernel.
btw, why did the original developer choose to hardcode the addresses in the code? it is much more readable to at lease use constants for that, eg. BASE=0xd000000, COMMAND=BASE+0x123, etc. someone decided to write unmaintainable code, here, and now you have to clean up the mess.