адрес строковой константы - PullRequest
0 голосов
/ 11 мая 2011

Я получаю адрес строки из ассемблера в C, и мне нужно получить содержимое этого адреса.Как это сделать?Google дает примеры C ++ с reinterpret_cast, но он не работает в C (я полагаю).Я буду признателен, если вы заметите необходимые libs тоже, tenx

#include <stdio.h> 
#include <stdlib.h> 

unsigned long const1(void); 

int main()
{ 
    printf("Const: %d\n", const1()); 
    return 0; 
}

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Если вы уже получили адрес и знаете, что это строка с нулевым символом в конце, тогда все, что вам нужно сделать, это обработать его как строку.

printf("%s", (char*)alleged_string_address);
1 голос
/ 11 мая 2011

Предварительный ответ, пока я жду вашей информации:

   char* foo = (char*)...pointer from assembly...;
    *foo = 'a'; /* write a to the address pointed at by foo */
    foo++;      /* increment the address of foo by 1 */
    *foo = 'b'; /* write b to that address.  foo now contains ab, if it points at RAM.  */

Этот ответ ориентирован на встроенные системы. Если вам нужен указатель на что-то вроде периферийного регистра, используйте volatile, чтобы избежать оптимизации компилятора.

   volatile char* foo = (char*)...pointer from assembly...;
    *foo = 'a'; /* write a to the address pointed at by foo */
    foo++;      /* increment the address of foo by 1 */
    *foo = 'b'; /* write b to that address.  foo now contains ab, if it points at RAM.  */
0 голосов
/ 11 мая 2011

Если вы знаете, есть байт с нулем в нем после строки, попробуйте следующее:

char* p = (char*) <your address here>;
// use p for whatever here

Если после строки нет нуля, то стандартные строковые функции в Си не будут работать.

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