информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаЗа кого нас держат?Атака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ламерский вопрос 10.05.02 12:06  
Автор: Moderator Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Как вставить следующий асм-код в Си код?
.model small
.stack 100h
.data
buff db 1024 dup (0)
.code
MAIN PROC
mov ax,@data
mov ds,ax
mov ax,440dh ; Выделяем для себя доступ
mov bl,81h
mov bh,1
mov cx,084Bh
mov dl,2
xor dh,dh
int 21h
mov [buff+67h],00h; Пишем на второй винт
mov al,81h
mov cx,128
mov dx,0
mov bx,offset buff
int 26h
mov ax, 440Dh; Закрываем доступ
mov bl,81h
xor bh,bh
mov cx,086Bh
int 21h
mov ah,4ch
int 21h
MAIN ENDP
END MAIN
Ламерский ответ 10.05.02 12:25  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
скомпилить в obj и прилинковать к остальным obj (если в VC, то просто включить в проект asm.obj и оно само допрёт, что делать)

в асмовских вставках кажется нельзя делать процедуры
если только в каких-нить продвинутых компилерах
Ламерский ответ 10.05.02 12:30  
Автор: Moderator Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> скомпилить в obj и прилинковать к остальным obj (если в VC,
> то просто включить в проект asm.obj и оно само допрёт, что
> делать)
>
> в асмовских вставках кажется нельзя делать процедуры
> если только в каких-нить продвинутых компилерах
А инфу по всему этому где можно посмотреть? У меня все, что есть ничего подобного ен описывает! 8(
Ламерский ответ++ 10.05.02 14:19  
Автор: Chingachguk <Chingachguk> Статус: Member
Отредактировано 10.05.02 14:29  Количество правок: 1
<"чистая" ссылка>
> А инфу по всему этому где можно посмотреть? У меня все, что
> есть ничего подобного ен описывает! 8(

Хотел заметить, что твой код 16-ти битный и он вызывает прерывания дос. Если ты его воткнешь в win32-код, то все рухнет ;)

Извини, если сказал банальность !

ЗЫ: Лучше делать асм-вставки в VC, видимо. asm {} end; Ну это уже сказали;
ЗЫЫ: Если ты нарыл, что можно окрыть запись через IOCTL(44h of int 21h), то есть шанс вызвать из win32 CreateFile(\\vin32) + DeviceIOControl это - меня как -то Zef научил ;) Инфа есть в MSDN + могу кодом поделиться, но я вызывал int 21h, AX=73xxh, а тебе надо там другие константы нарыть(те сделать win32 вызов 44h of int 21h).
[C++] Ламерский ответ++ 10.05.02 14:50  
Автор: Moderator Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> ЗЫЫ: Если ты нарыл, что можно окрыть запись через IOCTL(44h
> of int 21h), то есть шанс вызвать из win32
> CreateFile(\\vin32) + DeviceIOControl это - меня как -то
> Zef научил ;) Инфа есть в MSDN + могу кодом поделиться, но
> я вызывал int 21h, AX=73xxh, а тебе надо там другие
> константы нарыть(те сделать win32 вызов 44h of int 21h).
Дело в том, что я ток разбираюсь и все эти вызовы мне еще надо научиться делать! Поэтому и спрашивал хелпы! С мсдн косяк, ппж ток смогу диск достать! а ща в инете ищу может чего подскажите!? Код бы ОЧЕНь пригодился! Кинь на мыло если не трудно! wDevil@yandex.ru
для какого асма и компилера ? 10.05.02 12:56  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
если всё от MS то так:
masm -c filename.asm
потом в VC говоришь Project->Add to Project->Files->filename.obj
:)


если тебе не обязательно именно такую процедуру на асме, то лучше расковырять её и вставить в С

void AsmProc(void)
{
_asm
{
// асм-код без всяких заголовков
};
}
И для какой ОС? 10.05.02 15:00  
Автор: :-) <:-)> Статус: Elderman
Отредактировано 10.05.02 15:03  Количество правок: 1
<"чистая" ссылка>
Надо конкретнее формулировать вопрос.
Если это делается под 16-битный компилятор (DOS MZ-exe/Win3.1 NE-exe), то можно просто вставить этот код в _asm вставку.
В Win9x IOCTL и Int 25h/26h надо вызывать через vwin32.vxd, а в NT/2k совсем по-другому.

// Пример чтения Boot-сектора через Int 25h для Win9x

#define Not_VxD

#include <windows.h>
#include <stdio.h>
#include "vwin32.h"

void main()
{
  HANDLE hVWin32;
  DIOC_REGISTERS regs;
  DWORD cb;
  char Buf[512];

  hVWin32 = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0, 0, NULL);
 
// Lock logical volume
  regs.reg_EAX = 0x440D;
  regs.reg_EBX = 0x103;  // Lock level 1, drive C:
  regs.reg_ECX = 0x84A;          
  regs.reg_EDX = 7;
  DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
                           ®s, sizeof(regs),
                           ®s, sizeof(regs), &cb, NULL);
  if (regs.reg_Flags & 1)
     printf("Error: Couldn't lock volume!\n");

// Read Boot-sector
  regs.reg_EAX = 2;  // C:
  regs.reg_EBX = (DWORD)Buf;
  regs.reg_ECX = 1;  // read 1 sector 
  regs.reg_EDX = 0;
  DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_INT25,
                           ®s, sizeof(regs),
                           ®s, sizeof(regs), &cb, NULL);
  if (regs.reg_Flags & 1)
     printf("Error: 0x%X", regs.reg_EAX);

// Unlock logical volume
  regs.reg_EAX = 0x440D;
  regs.reg_EBX = 3;            // C:
  regs.reg_ECX = 0x86A;
  DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
                           ®s, sizeof(regs),
                           ®s, sizeof(regs), &cb, NULL);
  CloseHandle(hVWin32);
}

---
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach