Ответы пользователя по тегу Программирование
  • Почему в С 0 != 0, а 0 == 0?

    @theg4sh
    #include <math.h>
    int j;
    for (j = 0; j < SIZE_J && ceil(TMP_data_0[j])!=0; j++) {
            height[j] = TMP_data_0[j];
            printf("j = %d\ncurrent = %f\n", j, height[j]);
    }
    *size = j;

    На будующее: выкладывайте полный листинг, а не кусок - какие тпиы переменных, как они заполняются, что вообще происходить с ними.
    Кстати, каким компилятором все билдилось?
    Ответ написан
    Комментировать
  • Как реверсят протоколы клиент-серверных приложений?

    @theg4sh
    В дополнение к ответу Артем Воронов стоит еще добавить, что помимо данных в открытом виде, существет еще потоковое шифрование траффика. Самый распространенный пример - https, где данные представляются в зашифрованном виде. Так же существет куча "движков" для потокового симметричного шифрования траффика. В этом случае, неплохо быть или стать продвинутым математиком.
    Самый простой вариант для примера, запустить утилиту tcpdump на интерфейсе выхода в интернет для https:
    tcpdump -i eth0 'port 443' -X
    и в браузере открыть какой-нибудь https://goo.gl

    В остальном, чтобы понять, что отправляется нужно понять, как формируется структура данных при передаче.
    Поэтому пишите свои клиент-серверные программы, желательно на сях, и смотрите как выглядит траффик.
    Так же, стоит узнать о том как данные хранятся в памяти, например, что байты слова будут расположены в обратном порядке, что обычно строки передаются с предшествуюшим словом из количества байт в строке.

    Для примера дизассемблируйте предварительно скомпилированную программу:
    int main(int argc, char** argv)
    {
      static int var = 0xcc00ffee;
      return 0;
    }


    К прочтению: https://www.reddit.com/r/ReverseEngineering/commen...
    Ответ написан
    Комментировать
  • Плохо ли использовать одну глобальную константу?

    @theg4sh
    Использовать конструкцию вида:
    class Auth:
      _instance = None;
      def __init__(self, user, pswd):
        # some initialization
        self._id = None
        pass
      def getId(self):
        return self._id
      @staticmethod
      def getInstance(user, pswd):
        if Auth._instance is None:
          Auth._instance = Auth(user, pswd)
        return Auth._instance
    
    # later use authorization as Auth.getInstance().getId();

    Вообще, стоит познакомиться поближе с понятием Singleton и содержимым вот этой ссылочки

    Upd: пример-примером, но поправил инициализацию, извиняюсь :)
    Upd2: метод getInstance должен быть статическим, чтобы удовлетворять условию использования Auth.getInstance(). Поправил.
    Ответ написан
    4 комментария
  • Как в PHP сделать правильнее выполнение условия при множестве схожих условий?

    @theg4sh
    Да, использование массива это один из самых простых способов.
    Но все же конструкция из if будет быстрее - в случае с массивам помимо выделения памяти под строки, будет также аллоцироваться память под сам массив, тоже с деаллокацией.
    На одном условии это не заметно, только в масштабах крупного проекта сотни лишних операций выделения памяти от каждого клиента ни к чему.

    Как альтернатива блокам из if - конструкция switch-case:
    switch($a){
    case "one":
    case "two":
    case "three":
      // your code
    }


    В случае использования поиска только простых строк можно воспользоваться трюком с strpos:
    if (strpos(":"+$a+":", ":one:two:three:space ship:") !== FALSE) {
      // your code here
    }

    в данном случае будет запущен всего один цикл поиска подстроки.
    Ответ написан
    Комментировать