Чтение / запись кучи - PullRequest
       7

Чтение / запись кучи

0 голосов
/ 10 августа 2010

Может ли быть прочитано собственное пространство кучи?Может ли программное обеспечение самостоятельно изменяться в памяти?

Я пишу некоторый код, чтобы показать тему,

Я читаю собственный код в памяти?как (если это возможно) написать и изменить инструкцию во время выполнения?

#include<stdio.h>
#include<stdint.h>

volatile int addressBase;
uint8_t read(int address);


int main(void) {

    printf("Helium word");

    addressBase=(int)&main;        
    printf("[%X]", read( 0 ));         
    getchar();

    return 0;
}


uint8_t read(int address)
{

       const uint8_t *addr;                        
       addr=(const unsigned char *)(addressBase+(int)address);
       return (*addr);
}

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Вы можете читать и писать кучи на свой страх и риск.

Самомодифицирующийся код может быть полезен в ограниченных небольших средах, таких как небольшие встроенные системы. Однако современные процессоры для настольных компьютеров или серверов вообще не любят самоизменяющийся код, потому что он нарушает кэширование инструкций, предварительную выборку и конвейерную обработку. Один анекдот: TI-Scheme работает невероятно быстро на 386 процессорах. Он использовал самоизменяющийся код. В 486 процессорах введено кэширование инструкций, а TI-схема потерпела крах.

1 голос
/ 10 августа 2010

Память обычно делится на постоянную память команд и доступную для записи память данных, которая может быть или не быть исполняемой. Если ваше приложение хочет написать, а затем запустить свой собственный код (например, JIT-компилятор), вам, вероятно, потребуется использовать какой-то конкретный операционный метод для получения необходимого блока памяти. Так что да, вы можете прочитать свои собственные инструкции, но я очень сомневаюсь, что вы сможете изменить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...