How can I point an array to existing data in memory while using Better C?

Stijn Herreman stijn.herreman at outlook.be
Sun Jul 8 20:27:34 UTC 2018


https://forum.dlang.org/thread/ddckhvcxlyuvuiyazpqy@forum.dlang.org is similar to what I want to do, but the code by Adam cannot be used when using Better C (I assume slicing isn't supported).

I have the following code:

environment.d

     public __gshared header* GPT_header;
     public __gshared partition_entry[128] GPT_entries;

main.d

     GPT_header = cast(header*)0x00007e00;
     *(GPT_entries).ptr = *(cast(partition_entry*)0x00008000);

Disassembled, the code from main.d looks like this:

mov     ds:_D4boot11environment10GPT_headerPSQBg3gpt6header, 7E00h
mov     esi, 8000h
mov     edi, offset 
_D4boot11environment11GPT_entriesG128SQBk3gpt15partition_entry
mov     ecx, 20h
rep movsd

So GPT_header points to 0x7e00 as desired, but for GPT_entries it 
copies the first array element to a different location and makes 
it point to that location instead of 0x8000.

I should point out that I only have a vague idea of what I'm 
doing, I tried things until it compiled and worked (at first 
glance). If there are any docs that properly explain the casting 
of pointers, I'd appreciate the links.


More information about the Digitalmars-d-learn mailing list