Автор | С++ (вопросик) |
А вдруг тут есть знающие люди.
Код программы:
#include <stdlib.h>
#include <stdio.h>
void func(void)
{
int i;
printf("Print: ");
for( ; i > 0 ; i-- ) printf("%d ", i);
printf("Done\n");
}
int main(int argc,char* argv)
{
int *a;
a = (int*)((((int)(&argc) - 8) & (-0x10)) - 0x24);
*a=10; func();
*a=20; func();
return 0;
}
Как можете заметить, значение передается еще до того, как объявлена переменная.
Это работает! (а то вдруг кто не верит)
Вопрос:
a = (int*)((((int)(&argc) - 8) & (-0x10)) - 0x24);
Как загнать эту строчку в функцию, чтоб оно считалось не таким способом? |
молодец, я горжусь тобой! |
для ЛунныйМечтатель:
Пасиб за ап... |
тс - крутой алхимик, главное не зацикливаться... |
Я слышал на некоторых кафедрах отчисление 15.
Обрадуй военкома. |
вопрос. а зачем такую ересь исполнять? |
для Zael_Hell:
мм... все сессии закрыты : )
для letalis:
Надо.Тем более не ересь. Нет идеи как это можно изменить? |
a = (int*)((((int)(&argc) - 8) & (-0x10)) - 0x24);
эмм, а что ты хотел этим сделать? |
для sanek_92:
этим я напрямую в память ображаюсь к переменной i, которая еще не создана. |
Вся программа один сплошной лулз... |
для MrSlayer:
Это программа просто показывает конкретный "прием". Не буду же я всю прогу, которая это использует сюда постить. Ибо могу нарущать пользовательское соглашение винды, которую нельзя дисамблерить. |
Я не жду, что кто-то напишет конкретный пример, как это под общий вид загнать, может кто идею даст... |
Это программа просто показывает конкретный "прием".
а можно поподробнее, а то заинтересовал) |
Koek
Прием чего? |
для sanek_92:
А тебя не смущает, что сначала я кидаю переменной значение, а потом ее создаю, и причем все это работает? |
начать хотя бы с этого... Что ты выводить тут собрался то?
void func(void)
{
int i;
printf("Print: ");
for( ; i > 0 ; i-- ) printf("%d ", i);
printf("Done\n");
} |
Прием чего?
пост 4 |
для Koek:
хм, меня бы может и смутило бы, но я не вижу, в каком месте программы наблюдается описанная тобой ситуация |
*a=10; func();
это выведет
10 9 8 7 6 5 4 3 2 1 Done
*a=20; func();
20 19 18 ... 3 2 1 Done
При этом, я нигде не передаю значение переменной i для того чтоб цикл работал. Но оно работает. |
хоть бы на ворнинги при компиляции посмотрел... |