• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Проблема Проблема с циклом в С++

nikos

Green Team
25.12.2016
507
200
Здравствуйте! Бороздя простры интернета нашел вот такой код.
C++:
#define SIZE_MEM_MALLOC 1024*1024*1024

uint32_t *memdmp = NULL;

while(memdmp != NULL)

{

memdmp = malloc(SIZE_MEM_MALLOC);

memset(memdmp, 0x88, SIZE_MEM_MALLOC);       

free(memdmp);

err = code(void);

if (!err) break;

[/CODE]
И исходя из чистого интереса решил реализовать его в своем коде.
Получилось примерно вот-так
C++:
int main() //функция
{
    Sleep(1000);
    {
            uint32_t *memdmp = NULL;
            while (memdmp != NULL)
            {
                memdmp = (uint32_t*)malloc(SIZE_MEM_MALLOC);
                memset(memdmp, 0x88, SIZE_MEM_MALLOC);

                {
                    // тут выполняется мой код
                }
                    free(memdmp);
                    
                    
                }

            }
        }
    }
    return 0;
}
Но когда мой код перестал работать я как полный чайник в С++ был в недоумении. Только потом слегка подучив мат часть у меня появилось предположение что проблема в условии цикла.

C++:
 uint32_t *memdmp = NULL;

            while (memdmp != NULL)

            {
Но так как я полный чайник в C++ я не знаю как решить данную проблему и построить верное условие я даже не уверен что верно определил проблему. По этому очень надеюсь на помощь форума =)
 
Зависит от того, что именно нужно.

На вскидку:
1) При таком подходе
uint32_t *memdmp = NULL;
while (memdmp != NULL)
Выполнение не зайдёт в цикл.
Можно сделать такое условие цикла
Тогда выполнение зайдёт в цикл

2) Фукнция free не обнуляет переданный ей аргумент, поэтому правильнее было бы сделать так:
free(memdmp);
memdmp = NULL;

Опять же, всё зависит от того, чего именно нужно добиться. Нужно выполнить этот код только раз? Нужно многократное выполнение в цикле? Нужна ли переменная memdmp за пределами цикла?
 
  • Нравится
Реакции: nikos
Зависит от того, что именно нужно.

На вскидку:
1) При таком подходе

Выполнение не зайдёт в цикл.
Можно сделать такое условие цикла

Тогда выполнение зайдёт в цикл

2) Фукнция free не обнуляет переданный ей аргумент, поэтому правильнее было бы сделать так:


Опять же, всё зависит от того, чего именно нужно добиться. Нужно выполнить этот код только раз? Нужно многократное выполнение в цикле? Нужна ли переменная memdmp за пределами цикла?
Большое спасибо) Сейчас попробую ваше решение. Если переменая memdmp нужна дальше то тогда обнулять её не нужно?
 
Последнее редактирование:
Если переменная memdmp нужна за пределами цикла, то вызывать free(memdmp); - нельзя, потому, что это приведёт к освобождению памяти, и после работы цикла, указатель memdmp будет указывать на освобождённый участок памяти. После работы, память нужно освободить в любом случае, чтобы не допустить утечек памяти.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD