#include <stdint.h>
#include <stdio.h>
uint32_t iNSymbols = 3986;
// What the hash table looks like in the dynamic segment
struct Elf32_HashTable
{
uint32_t nBuckets;
uint32_t nChains;
uint32_t bucket[1]; // Elf32_Word bucket[nBuckets];
uint32_t chain[1]; // Elf32_Word chain[nChains];
};
int main()
{
uint32_t sz = 2 + iNSymbols + iNSymbols /3 + iNSymbols%0x3;
uint32_t* buf = new uint32_t[sz]();
for(uint32_t i = 0; i < 5; i++)
printf("%u\n", buf[i]);
Elf32_HashTable* hash = (Elf32_HashTable*)buf;
hash->nBuckets = iNSymbols /3 + iNSymbols%0x3;
hash->nChains = iNSymbols;
for(uint32_t i = 0; i < 5; i++)
printf("after: %u\n", buf[i]);
//hash->bucket = buf + 2;
for(uint32_t i = 0; i < 5; i++)
printf("hash->bucket[%u]: %u\n", i, hash->bucket[i]);
for(uint32_t i = 0; i < 5; i++)
printf("%u\n", buf[i]);
return 0;
}
I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnVpbnQzMl90IGlOU3ltYm9scyA9IDM5ODY7CgovLyBXaGF0IHRoZSBoYXNoIHRhYmxlIGxvb2tzIGxpa2UgaW4gdGhlIGR5bmFtaWMgc2VnbWVudApzdHJ1Y3QgRWxmMzJfSGFzaFRhYmxlCnsKICB1aW50MzJfdCBuQnVja2V0czsKICB1aW50MzJfdCBuQ2hhaW5zOwogIHVpbnQzMl90IGJ1Y2tldFsxXTsgLy8gRWxmMzJfV29yZCBidWNrZXRbbkJ1Y2tldHNdOwogIHVpbnQzMl90IGNoYWluWzFdOyAgLy8gRWxmMzJfV29yZCBjaGFpbltuQ2hhaW5zXTsKfTsKCmludCBtYWluKCkKewoJdWludDMyX3Qgc3ogPSAyICsgaU5TeW1ib2xzICsgaU5TeW1ib2xzIC8zICsgaU5TeW1ib2xzJTB4MzsKCXVpbnQzMl90KiBidWYgPSBuZXcgdWludDMyX3Rbc3pdKCk7Cglmb3IodWludDMyX3QgaSA9IDA7IGkgPCA1OyBpKyspCgkJcHJpbnRmKCIldVxuIiwgYnVmW2ldKTsKCUVsZjMyX0hhc2hUYWJsZSogaGFzaCA9IChFbGYzMl9IYXNoVGFibGUqKWJ1ZjsKCWhhc2gtPm5CdWNrZXRzID0gaU5TeW1ib2xzIC8zICsgaU5TeW1ib2xzJTB4MzsKCWhhc2gtPm5DaGFpbnMgPSBpTlN5bWJvbHM7Cglmb3IodWludDMyX3QgaSA9IDA7IGkgPCA1OyBpKyspCgkJcHJpbnRmKCJhZnRlcjogJXVcbiIsIGJ1ZltpXSk7CgkvL2hhc2gtPmJ1Y2tldCA9IGJ1ZiArIDI7Cglmb3IodWludDMyX3QgaSA9IDA7IGkgPCA1OyBpKyspCgkJcHJpbnRmKCJoYXNoLT5idWNrZXRbJXVdOiAldVxuIiwgaSwgaGFzaC0+YnVja2V0W2ldKTsKCWZvcih1aW50MzJfdCBpID0gMDsgaSA8IDU7IGkrKykKCQlwcmludGYoIiV1XG4iLCBidWZbaV0pOwoJcmV0dXJuIDA7Cn0=