Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    В общем, да. В VS передаёт this через ECX в виртуальных методах, даже когда это не требуется, например для внешних методов(COM).
    Ещё вопрос? Есть ли в МАСМе оператор который возвращает имя типа, TYPE возвращает размер типа в байтах, а мне надо что бы строку возвращал. И есть ли такой оператор в FASM'е? А так же, существуют ли внешние препроцессоры для МАСМа, где решены такие проблемы.
     
  2. Эльвин

    Эльвин New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2018
    Сообщения:
    16
    Возможно ли сразу перевести картинку, сохраненную в формате bmp c глубиной цвета 24 бит в двоичный код. И потом после некоторых манипуляций с этим двоичным кодом , вернуть обратно изображение. Возможно ли такое на Си ?
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Задание сформулировано неточно. Любой пиксель в BMP - сам по себе двоичный код.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    SadKo,

    Нормально и понятно сформулирована задача. Автор вопроса описал это понятиями, которые ему доступны соответственно уровню знаний.

    1. Выучить язык реализации, в данном случае си.
    2. Изучить формат файла.
    3. Использовать готовые функции, но для этого нужно вернуться к п. 1
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    SadKo,
    IMHO, Эльвин хочет спрятать в картинку исполняемый код и подсунуть кому-то
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Mikl___,

    Да врядле, он не знает что такое возможно и сами принципы.
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Стеганография что-ли? Не знал что такими вещами студенты занимаются.
     
    Эльвин нравится это.
  8. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    503
    Ну мож курсяк или диплом или доклад на конфу пишед:)
     
  9. Эльвин

    Эльвин New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2018
    Сообщения:
    16
    мне необходимо написать клиент-серверную программу.Всё , что я нашел по этому поводу - это только это http://www.helloworld.ru/texts/comp/lang/visualc/vc2/1
    На этом этапе возникают проблемы :

    Теперь объявление переменную типа SOCKET например s :
    Код (C):
    1. s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    Создание socket'а осуществляется следующим системным вызовом
    Код (C):
    1.     int socket (domain, type, protocol)
    2.         int domain;
    3.         int type;
    4.         int protocol;
    Как они должны быть записаны в программе ?
    Код (C):
    1. #include"Winsock2.h"
    2. #include<stdio.h>
    3. WSADATA WsaData;
    4. int main()
    5. {
    6.     int err = WSAStartup(0x0101, &WsaData);
    7.     if (err == SOCKET_ERROR)
    8.     {
    9.         printf("WSAStartup() failed: %ld\n", GetLastError());
    10.         return 1;
    11.     }
    12.     int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // не уверен , что  s должен быть типа int
    13.     int socket(domain, type, protocol)   // проблема именно в этом объявлении , не понимаю, почему скобки
    14.         int domain;
    15.     int type;
    16.     int protocol;
    17. }
     
    Последнее редактирование модератором: 14 ноя 2018
  10. alex-rudenkiy

    alex-rudenkiy New Member

    Публикаций:
    0
    Регистрация:
    26 май 2017
    Сообщения:
    16
    Помогите сделать задачу с помощью "Поиск с возвратом":
    В матрице n x m целых чисел встречаются нули. Можно ли перестановкой строк добиться того, чтобы нули в каждом столбце занимали только самые нижние позиции? Получить все такие матрицы
     
    Последнее редактирование модератором: 14 ноя 2018
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Эльвин, почитайте "Программирование в сетях Microsoft Windows" Авторы Энтони Джонс, Джим Оланд. И все вам станет понятно

    alex-rudenkiy, покажите вначале ваш вариант.
     
  12. alex-rudenkiy

    alex-rudenkiy New Member

    Публикаций:
    0
    Регистрация:
    26 май 2017
    Сообщения:
    16
    Понимаете, проблема в том что, я не могу понять формулировки задачи, ведь можно и просто перебором всех строк получить все матрицы, которые удовлетворяют нашему условию?
     
  13. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Имеется вот такой код на Си:
    Код (C):
    1. for( i = 0; i < 100; i++ )
    2. ivector5[ i * 2 + 3 ] = 5;
    После запустил оптимизацию компилятора gcc и в нём мне нужно найти ассемблерный код, который соответствовал бы этому Си коду
    Загрузил код оптимизированный код,в нём нашел только это
    Код (ASM):
    1. movl $ivector5+12, %ecx
    2.  movl $ivector5+812, %esi
    3.  .p2align 4,,10
    4.  .p2align 3
    5. .L7:
    6.  movl $5, (%rcx)
    7.  addq $8, %rcx
    8.  cmpq %rcx, %rsi
    9.  jne .L7
    Но это вовсе не похоже на то, что происходит в цикле на Си
    Помогите найти ассемблерный код, соответствующий Сишному
     

    Вложения:

    • fileO2.rar
      Размер файла:
      1,6 КБ
      Просмотров:
      431
    Последнее редактирование модератором: 29 сен 2018
  14. kam1

    kam1 New Member

    Публикаций:
    0
    Регистрация:
    26 июн 2011
    Сообщения:
    10
    Неохота в файл лезть. Пометьте как-нибудь код до начала вызова.
    Например, протекторы для маркирования шифруемых функций делают так : перед вызовом искомого кода для x86 какой-нибудь inline asm jump $+N вперед, где после $ уникальная сигнатура начала на N байт, для конца так же. Для x64 просто вызов перед/после помечаемого кода особой функции-метки. Можете в неё бряк поставить, когда вызовется - значит, далее по её адресу возврата код.
     
  15. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    как это возможно сделать, если я просто вбиваю в терминал gcc -S -O2 -o testO2.s и имя файла на си?Можете подробнее рассказать для 64-х
     
  16. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Всё здесь правильно происходит
    Код (ASM):
    1. movl $ivector5+12, %ecx ; в RCX помещается адрес первой ячейки, в которую следует записать число 5 (3 int'а относительно начала массива).
    2. movl $ivector5+812, %esi ; в RSI помещается адрес последней ячейки, в которую следует записать число 5.
    3.  movl $5, (%rcx) ; записываем число 5 в текущую ячейку.
    4.  addq $8, %rcx ; смещаем адрес текущей ячейки на 8 байт (2 int'а)
    5.  cmpq %rcx, %rsi ; проверяем, дошли ли до конца массива.
    6.  jne .L7 ; повторяем цикл, если не дошли до конца массива
    Это называется "оптимизация", Карл.
     
    Последнее редактирование модератором: 14 ноя 2018
    2Hard2Forget нравится это.
  17. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Есть такой код.
    Код (C++):
    1. //typedef     (uint64(__stdcall *aaa)(int, int) tpSearchBlackQueens;
    2. void*   SearchBlackQueens[CountBlocksMax] = {
    3.    SearchBlackQueens_0,
    4.    SearchBlackQueens_1,
    5.    SearchBlackQueens_2,
    6.    SearchBlackQueens_3,
    7. #if (__PLATFORM__ <= 32)
    8.    SearchBlackQueens_4,
    9.    SearchBlackQueens_5,
    10.    SearchBlackQueens_6,
    11.    SearchBlackQueens_7,
    12. #endif // __PLATFORM__
    13. };
    Как настроить таблицу? Чтобы вызывать функцию, без явного объявления прототипа.
    Код (C++):
    1. CountIter = ((uint64(__stdcall *)(int, int))SearchBlackQueens[CountBlocks])(0, 1);
    Например так.
    Код (C++):
    1. CountIter = SearchBlackQueens[CountBlocks])(0, 1);
    И чтобы компилятор контролировал прототипы, самих функций и объявленных указателей в таблице.
    А то прототип никак не контролируется, из-за этого ловлю исключения(если прототипы различаются), а в некоторых случаях возможно получить просто неверный результат.
     
    Последнее редактирование модератором: 14 ноя 2018
  18. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Что это за *овно? У вас все функции SearchBlackQueens_0 - SearchBlackQueens_7 имеют одинаковый прототип?
    Если да, то тогда:
    Код (Text):
    1.  
    2. typedef uint64 (__stdcall *search_black_queens_t)(int, int);
    3.  
    4. search_black_queens_t  SearchBlackQueens[CountBlocksMax] = {
    5.    SearchBlackQueens_0,
    6.    SearchBlackQueens_1,
    7.    SearchBlackQueens_2,
    8.    SearchBlackQueens_3,
    9. #if (__PLATFORM__ <= 32)
    10.    SearchBlackQueens_4,
    11.    SearchBlackQueens_5,
    12.    SearchBlackQueens_6,
    13.    SearchBlackQueens_7,
    14. #endif // __PLATFORM__
    15. };
    16.  
    17. /// ...
    18. SearchBlackQueens[0](1, 2);
    19.  
    Если нет, то имеет смысл их разнести в разные массивы, чтобы не путаться.
     
    Intro нравится это.
  19. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Там и надо чтобы одинаковые прототипы были, чтобы оператор switch не использовать, оптимизация такая. Можно и одну функцию использовать, но там у меня развёрнутый цикл, из-за этого пришлось 8 вариантов одной функции делать.
     
  20. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Как узнать тактовую частоту процессора в Linux и xBSD и др.
    В винде понятно, QueryPerformanceFrequency работает. А как это у других ОС.
    --- Сообщение объединено, 15 ноя 2018 ---
    Ещё проблема QueryPerformanceFrequency, в WinXP VSC++2010 возвращает в герцах, а в 2017 килогерц. В чём проблема?