2016-10-08 7 views
2

У меня есть следующие строки:указатель в с

char *name = malloc(strsize + 1); 

и

uint8_t *data; 
data = (uint8_t *)name; 

Это правильно? Не существует ли вероятность того, что имя указателя будет плохо интерпретировано при выполнении этого преобразования?

+0

Возможный дубликат [Преобразование между uint8 и char в C] (http://stackoverflow.com/questions/35264923/conversion-between-uint8-and-char-in-c) – gsamaras

+0

Из интереса, t вы malloc прямо к uint8_t *? – Bathsheba

+0

, потому что мне нужно найти ОГРОМНЫЙ эксплойт в программе, написанной кем-то (он говорит, что есть эксплойт), и мне нужно его найти, и мне было интересно, если это так. – user6575913

ответ

1

Это не должно быть большой проблемой, за исключением того, что знаковость памяти будет интерпретироваться по-разному между доступом по data и name. На большинстве практических платформ размер char и uint8_t в битах одинаковый.

+0

, и если они интерпретируются по-разному, вы можете получить доступ к ячейке памяти, которую вы не хотите? – user6575913

+0

@ user6575913 это знак интерпретируемых данных, ** не ** указатель указателя –

+0

@ user6575913 Пример: 'data [0] = 255;' print' (int) name [0] 'будет давать -1. Это может сбивать с толку, но вы не получаете доступ к какой-либо «запрещенной» памяти. – tofro

0

Нет, обращение законно. Однако при попытке распечатать data возникнут проблемы, потому что у вас больше нет char*. Помимо этого, литье полностью поддерживается.