0 Вопрос: Обмен двух подстрок

вопрос создан в Thu, May 2, 2019 12:00 AM

Я использовал ghidra для обратного инжиниринга бинарного файла, и он использовал calloc () для получения строки из памяти, а затем использовал начальное число для получения двух случайных фрагментов этой строки. Затем он переставляет эти две подстроки. Это делает это 1000 раз, а затем показывает ответ. Я не уверен, что * (undefined *) необходимо заменить (это мой первый опыт работы с C)

Я пытался просто сохранить две подстроки и поменять их местами таким образом, но мне нужно сохранить их в одной и той же ячейке памяти, чтобы распечатать их снова.

  lVar5 = ftell(__stream);
  iVar2 = (int)lVar5;
  __ptr = calloc((long)(iVar2 + 1),1);
  iVar3 = rand(); 
  iVar3 = iVar3 % (iVar2 + -1);
  iVar4 = rand();
  iVar4 = iVar4 % (iVar2 + -1);
  uVar1 = *(undefined *)((long)__ptr + (long)iVar4);
  *(undefined *)((long)__ptr + (long)iVar4) = *(undefined *)((long)__ptr + (long)iVar3);
  *(undefined *)((long)iVar3 + (long)__ptr) = uVar1;
    
- 1
  1. Я думаю, это означает, что инструмент не может определить, какой именно тип используемых переменных является фактическим, поскольку эта информация теряется после компиляции программы в машинный код .
    2019-05-02 14: 58: 12Z
  2. код получает значение, взятое из файла, используя его для выделения некоторой памяти кучи, используя два случайных значения в качестве смещения в этой выделенной памяти, извлекая два значения из эти случайные места в выделенной памяти и обмен их. Тем не менее, обратите внимание: вся выделенная память равна «0x00», поэтому этот код бессмыслен
    2019-05-02 15: 55: 51Z
0 ответов                              0                         
источник размещен Вот