Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
Посл.ответ | Сообщение |
|
Создано: 13 июля 2012 18:28 · Личное сообщение · #1 Добрый день, уважаемые форумчане. Ни для кого не секрет, что решил я с недавних пор пойти учиться программированию. Поэтому стали меня интересовать практические аспекты кодинга, иногда весьма далёкие от вопросов реверсинга. Поэтому чтоб не засорять форум, решил создать этот блог. Стоит сказать, что вопросы, которые планируется тут разбирать, не такие уж и бесполезные. Они часто могут возникать при написании тех же кейгенов или тулз для реверсинга, так что, надеюсь, каждый сможет найти здесь что-нибудь интересное. Как некоторые уже догадались, вопросы Common Controls, простым числам, и сегодняшний вопрос по OpenGL как раз из серии учебных. Теперь о самом вопросе. На днях выполнял задание про отрисовку простых фигур: треугольника, квадрата и т.д. Решено было выполнять рисование средствами OpenGL. Литературы по этому делу много, поэтому я разобрался, что и как. Т.е. в литературе советовали использовать бибилиотеку glut.dll, которая сама не относится к стандартному OpenGL, но её применение, как я понял, упрощает использование OpenGL в своих проектах. Далее я решил создать базовый класс для отрисовки треугольника, а от него создать производные классы для отрисовки других геометрических фигур. Но на практике получилась вот такая сложность. Дело в том, что glut, по сути, инкапсулирует функции Windows и OpenGL, что упрощает операции с ними. Но от базовых вещей же никуда не деться. Т.е. если процедура обработки оконных сообщений (CALLBACK WindowProc) должна присутствовать, то в классе она должна быть статической. Так и здесь: Code:
Но вот проблема - мне нужно передать внутрь Draw несколько параметров. Являясь статическим методом, Draw не имеет указателя this, а значит не видит обычных полей. Статические поля он видит, но при попытке в конструкторе присвоить значения этим полям появляется ошибка линковки. Понятное дело, что по-хорошему, можно обойтись совсем без классов, но это превратит код в кашу - большое количество глобальных переменных, почти одинаковые функции со схожим функционалом принесут путаницу раньше, чем будут отрисованы несколько фигур. Кто посоветует, как быть в такой ситуации и как решить проблему со статическими функциями-членами? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 22 апреля 2013 11:48 · Личное сообщение · #2 Сейчас попытаюсь описать способ создания кастомного виджета в Qt Designer с его последующим добавлением к проекту. У Шлее есть прекрасный раздел, где он описывает, как создаются формы (виджеты) в среде Qt Designer, но очень туманно расписано, как эти формы потом прикреплять к проекту. Поэтому представим, что форма у нас уже есть, нужно как-то всунуть её в проект. Представим, что у нас есть некий MyForm.ui. Открыв его в дизайнере, выбираем в меню Форма -> Показать код. Когда код отображён, в окне с кодом давим кнопку Сохранить. Получаем файл с расширением .h. Потом запускаем Qt Creator, жмём "Создать проект", выбираем "другой проект", "пустой проект Qt. Когда создана директория пустого проекта, копируем туда файлы с расширением .ui и .h - т.е. нашу форму и код. Потом добавляем эти два файла к проекту, для этого правой кнопкой жмём на корневой узел дерева проекта и выбираем "Добавить существующие файлы..". Потом добавляем .cpp с кодоми дальше опять работаем по книге Шлее. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 24 апреля 2013 13:13 · Личное сообщение · #3 Вот недавно открыл для себя. Может, кому-то будет полезно. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 02 июня 2013 21:26 · Личное сообщение · #4 Вот решил на досуге почитать про новый стандарт С++0x (он же 11). Если кому тоже интересно, то ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 10 июня 2013 11:16 · Личное сообщение · #5 Почему ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 12 июня 2013 16:42 · Личное сообщение · #6 ARCHANGEL пишет: Почему --> Эта ссылка <-- не добавлена в топике Опять .Net? Добавлена, но не в топик-старт: ----- One death is a tragedy, one million is a statistic. | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 20 июня 2013 16:48 · Личное сообщение · #7 Терзаю бедный C# - пытаюсь залогиниться на лабе программно. Code:
Expectation Failed получаю. Грустно. Что делать и чё такое может быть? Пасс, естественно, ненастоящий. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 20 июня 2013 17:23 · Поправил: neomant · Личное сообщение · #8 Code:
Длина - это только самого тела, без заголовков. Закрывать поток не надо. ----- Следуй за белым кроликом | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 20 июня 2013 21:40 · Личное сообщение · #9 |
|
Создано: 21 июня 2013 11:27 · Поправил: ARCHANGEL · Личное сообщение · #10 Что-то в книгах по шарпу тема работы с сетью не раскрыта. Может, кто посоветует статьей или книг каких-то, где всё нормально описывается, потому что вопросов масса с этими классами и методами. Например, нагуглил, в чём была проблема с вышеприведенным кодом при работе через прокси. Оказывается, для прокси нужно выставить Code:
Теперь следующая проблема - не получается заюзать куки (cookies) после авторизации. Смотрел через Http Analyzer - не пойму, как Опера решает, какие куки нужно передавать в следующем за POST-запросом GET-запросе. Как вообще создать GET-запрос? В гугле куча ссылок на одн и тот же код: Спустя некоторе время Нагуглил книгу .NET сетевое программирование для профессионалов - Кровчик и др.. Пробую читать. Спустя ещё некотроое время С авторизацией и кукисами разобрался. Давайте кратенько рассмотрим суть проблемы. Если я в чём-то неправ, поправьте. Code:
У класса NetConnector есть два конструктора - один для прямого соединения, другой - для прокси без авторизации. Есть два метода - один для отправки запроса POST, другой - для GET. Заголовки http типа accept, user-Agent и других устанавливаются в конструкторе. Сразу оговорюсь, что класс предназначен для разовой авторизации с последующей загрузкой с сервера одной страницы с персональными данными. Далее краеугольный камень работы с кукисами опишу подробнее. Экземпляр HttpWebRequest создаётся в конструкторе: Code:
Потом перед пост-запросом устанавливается значение для кукиконтейнера: Code:
Ели этого не сделать, то куки не получится достать из ответа через свойство. И вот тут интерес, достаём мы уже коллекцию: Code:
Её мы храним для использования в следующем запросе. Как я понял, в дотнете для HttpWebRequest поддерживается правило "один экземпляр - один тип запроса", т.е. выбрав в конструкторе метод POST, мы его уже не изменим. Поэтому для GET создаётся ещё один экземпляр. Явно писать тип запроса не нужно, GET идёт по умолчанию. Создав новый экземпляр, мы создаём в нём пустой контейнер для куки, и добавляем туда нашу коллекцию, полученную выше: Code:
Если ответ нужно записать на диск (например, как html страницу), то нужно помнить, что для записи в файл нужно применять объект Encoding отдельно - неважно, что строа уже была преобразована при чтении из потока. Для этого responseEncoding и сделан свойством. Т.е. пример записи может выглядеть так: Code:
----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 21 июня 2013 18:53 · Поправил: ARCHANGEL · Личное сообщение · #11 Странно, теперь - другая проблема. Строка: Code:
как бы отрабатывает, но в POST запросе нет заголовка с куками. Соответственно и в ответе нет. И не получается указать серверу, что я залогинился. Что за дела? Добавлено Переделал код: Code:
И добавил вручную содержимое куки перед отправкой пост-запроса: Code:
Но сервак лабовский мне не возвращает куки. Их тупо нет. Что делать и почему это может быть? Вот весь ответ сервера. Code:
Блин, чуваки, вы не поверите Запостил сюда ответ от сервака и стал думать, что же имелось ввиду под фразой Moved Permanently. И подумал, что перемещён он не очень-то и далеко - на адрес Location:http://exelab.ru/f/. Так я ж по нему и обращаюсь. А нет! Я (Василий Алибабаевич, нехороший человек) слэш последний удалил случайно. Вернул слэш, и всё стало прекрасно работать. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 25 июня 2013 16:31 · Личное сообщение · #12 Блин, очередной трабл с куками. Перед отправкой GET запроса хочу записать куки вида __utma=69486357.837012945.1372160233.1372160233.1372160233.1; и т.д. Делаю так: Code:
Не работает, или так: Code:
Тоже не работает. И даже так: Code:
Тоже не работает. Без ошибок выполняется, но куки тупо не записываются в заголовок. Почему? Какого хера? Уже всю башку сломал и весь гугл прогуглил. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 25 июня 2013 17:01 · Поправил: neomant · Личное сообщение · #13 Не проверял, но могу предложить: - создать контейнер для куки, добавить в него переменные по одной и присвоить контейнер запросу; - добавлять по одной переменной с помощью Headers.Add(HttpRequestHeader.Cookie, ...); - может быть проблемы с форматом строки куков(лишние разделители при переносе строки). Можно после добавления куков выпасть на точке останова и просмотреть контейнер. ----- Следуй за белым кроликом |
|
Создано: 25 июня 2013 22:24 · Личное сообщение · #14 |
|
Создано: 27 июня 2013 09:15 · Поправил: ZaZa · Личное сообщение · #15 ARCHANGEL Я делал так: Отправляем по POST на форму логина. Соответственно, при правильном логине и пароле, возвращается контейнер Cookies... При последующем запросе, будь то GET или POST, указываем контейнер... У меня работало Примерно вот так: Code:
----- One death is a tragedy, one million is a statistic. |
|
Создано: 27 июня 2013 10:19 · Личное сообщение · #16 ZaZa Та не - на форуме экзелаба у меня уже всё работает. Я логинился после этого на другой ресурс. Там обязательно надо было указать Referer, без этого не хотело логиниться, а я сразу как-то просмотрел этот момент. Плюс ещё в качестве дополнительного небольшого напряга там на форме логина сделали один скрытый элемент с атрибутом, который сервер постоянно меняет при каждом GET-запросе. Но и эта проблема легко решалась - я просто парсил с помощью регэкспов страницу, находил этот атрибут и подставлял в пост-запрос. Естественно, также подставлял куки, полученные при первом GET. Если интересует, что за ресурс, могу в личку отписать. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 27 июня 2013 15:15 · Поправил: ZaZa · Личное сообщение · #17 |
|
Создано: 22 июля 2013 23:35 · Поправил: ARCHANGEL · Личное сообщение · #18 На днях искал одно, а нашёл А искал, собственно, следующее, может, кто тоже искал. В общем, в бинаре у меня есть многократный вызов одной и той же функции. Принимает она одно и то же число параметров, но каждый раз это может выглядеть примерно так: Code:
Или так: Code:
Короче, вы поняли - по маске тут не поищешь. Есть ли в Иде какая-то функция в сдк или скриптами как-то можно, чтоб я мог получить значение первого, второго и других параметров для интересующей меня функции? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 июля 2013 10:06 · Личное сообщение · #19 |
|
Создано: 23 июля 2013 10:12 · Поправил: ARCHANGEL · Личное сообщение · #20 neomant Там обфускации нет, инструкции между push first_param и push second_param тоже полезные и нужные, в дальнейшем используются. Просто компилятор сгенерил в одном случае такой код, а в другом - немного другой. Ну это как в студионом компиляторе, например, API может вызываться через call dword ptr, а может например, так: Code:
Ида в любом случае распознаёт параметры как аргументы функции, распознаёт правильно. Но мне нужно с ними дальше выполнить некую работу, и для этого нужно получить значения этих самих аргументов. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 23 июля 2013 11:52 · Личное сообщение · #21 Меня эта конструкция смутила: Code:
Студийный компилятор делает вызов по регистру при работе с методами классов или если покрутить с оптимизацией. Самый простой способ в вашем случае поискать по перекрёстным ссылкам и посмотреть параметры руками. ----- Следуй за белым кроликом |
|
Создано: 24 июля 2013 13:31 · Личное сообщение · #22 Возник тут у меня до боли тупой вопрос, весь гугл уже перегуглил. Вот скажите, хочу я жёстко захардколить строку шестнадцатеричными значениями. Типа так: Code:
Должно на выходе показать мне сообщение AB, но в памяти студийный компилятор формирует мне вот такую хрень: Code:
Как в памяти получить 00C72384 >41 42 00 ??? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 24 июля 2013 13:57 · Личное сообщение · #23 ARCHANGEL пишет: "\0x41\0x42\0x00" "\x41\x42\x00" ? ----- http://ntinfo.biz | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 24 июля 2013 14:51 · Личное сообщение · #24 |
|
Создано: 26 июля 2013 10:07 · Личное сообщение · #25 ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: DenCoder |
|
Создано: 30 июля 2013 14:56 · Личное сообщение · #26 Весьма занимательное чтиво, не лишённое косяков, но занимательное. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: hors, DenCoder |
|
Создано: 01 августа 2013 13:29 · Поправил: ARCHANGEL · Личное сообщение · #27 Когда решил начать смотреть, то делал это больше от "нечего делать", типа, да что там нового может быть? А вот и нет, уроки очень занимательны, всем, даже тем, кто юзает иду и так, советую глянуть. Я, например, после этого переосмыслил использование иды как дебаггера. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: DenCoder |
|
Создано: 08 сентября 2013 16:03 · Личное сообщение · #28 Эх, продолжается моя нелёгкая учёба. На этот раз возник у меня вопрос по графам. Точнее, есть у меня связный неориентированный граф. Города и расстояния. Хочу (ну, не я, азадание такое) найти все пути из пункта А в пункт Б. Да, пользовался гуглом. Решения не нашлось. Если кто-то нашёл, киньте ссылкой. Также был бы признателен за любые комментарии вплоть до описания алгоритма на пальцах или на любых других подручных средствах. Суть вещей я понимаю, т.е. есть реализация обхода в глубину и поиска первого попавшегося пути. А вот со всеми путями что-то пока не получилось. Велосипед изобретать не хочется, хочется какого-то правильного грамотного решения. Надеюсь на ваши предложения. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 08 сентября 2013 16:53 · Личное сообщение · #29 |
|
Создано: 08 сентября 2013 18:04 · Личное сообщение · #30 reversecode По этому запросу гугл выдал много всего. По самой первой ссылке нашёл вот это: One possible solution to find all paths [or all paths up to a certain length] from s to t is BFS, without keeping a visited set Ну, ясно, что как-то надо граф обходить. Поиск в глубину подходит, конечно. Но "без сохранения посещённых вершин" можно было и подробнее расписать. Т.е. я понимаю суть проблемы так. В принципе, подойдёт любой способ обхода графа - хоть в ширину, хоть в глубину, т.к. есть теорема, которая гласит, что если граф связен, то поиск в ширину и поиск в глубину обходят все вершины по одному разу Далее допустим, обхожу я граф в глубину. И тут во время обхода нашёл я один из путей. Текущая реализация, которая есть у меня, тут же завершает свою работу и возвращает этот путь. А нужно вернуть путь, но продолжать обход. Т.е. при выходе из функции обхода нужно удалять текущую вершину из списка пройденных. Попробую всё это реализовать... ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 10 сентября 2013 00:10 · Личное сообщение · #31 Вполне годится для ответов на многие простые вопросы. ----- Stuck to the plan, always think that we would stand up, never ran. |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >> |
eXeL@B —› Дневники и блоги —› ARCHANGEL's blog |