C maneira padrão compatível para acessar o endereço do ponteiro nulo?
Em C, diferindo oPonteiro nulo é Comportamento indefinido, no entanto, o valor do ponteiro nulo tem uma representação de bits que, em algumas arquiteturas, aponta para um endereço válido (por exemplo, o endereço 0).
Vamos chamar esse endereço deendereço de ponteiro nulo, por uma questão de clareza.
Suponha que eu queira escrever um software em C, em um ambiente com acesso irrestrito à memória. Suponha ainda que eu queira escrever alguns dados no endereço do ponteiro nulo:como eu conseguiria isso de uma maneira compatível com os padrões?
Caso de exemplo (IA32e):
#include <stdint.h>
int main()
{
uintptr_t zero = 0;
char* p = (char*)zero;
return *p;
}
Este código quando compilado com o gcc com-O3 para IA32e é transformado em
movzx eax, BYTE PTR [0]
ud2
devido a UB (0 é a representação de bit do ponteiro nulo).
Como C está próximo da programação de baixo nível, acredito que deve haver uma maneira de acessar o endereço do ponteiro nulo e evitar UB.
Só para ficar claro
Estou perguntando sobre o que o padrão tem a dizer sobre isso,NÃO como conseguir isso de uma maneira definida pela implementação.
Eu sei a resposta para o último.