Resultados 1 a 9 de 9
  1. #1

    [dúvida]controlar destino na memória

    Bom acho que o título ficou meio estranho
    mas por exemplo ao ler dados de um disquete usariamos a int 13h e ela usa os registradores ES e BX para apontar onde serão escrito os dados

    EX:
    Código:
    mov bx, 0800h
    mov es, bx 
    mov bx, 0 ;0800:0000h ( ES = 0800h, BX = 0000h )
    Como eu faria isso no C++?
    teria que ser feito com o assembly inline do C++?
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

  2. #2
    Hacker Avatar de blackwinner
    Data de Ingresso
    Dec 2006
    Localização
    Aqui
    Posts
    1.273
    Cara, int 13h é interrupção.
    Não se usa mais interrupções para programação user-mode.(Não diretamente, só a ntdll.dll usa uma especial para trocar entre user e kernel-mode //sysenter)

    Hoje em dia, usa-se API's e handles para os kernel-objects.

    Caso realmente queira fazer isso, você pode usar o mesmo conceito que os shellcodes usam.

    Código:
    char ShellCode[] = "\xBB\x00\x08\x00\x00\x8b\xe3\x33\xdb\xcd\x13";
    void (*)()(ShellCode)();
    Mas ai já é melhor usar inline asm mesmo. =p

  3. #3
    Aham a int13h é a interrupt do disquete.
    Mas ai você já esta falando da plataforma Windows não estaria?
    Mas é mais por querer saber mesmo.
    Obrigado pelo esclarecimento black.
    Abraço!
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

  4. #4
    Hacker Avatar de blackwinner
    Data de Ingresso
    Dec 2006
    Localização
    Aqui
    Posts
    1.273
    Sim, isso é da plataforma windows.
    Usar interrupções específicas é impossível pro C ou C++.
    O que se faz na programação de sistemas operacionais por exemplo, é criar uma espécie de "header" que contém todas as interrupções, tarefas e estruturas de dados específicas de uma plataforma que é usado pelo C.
    Tudo isso já é feito em assembly.
    No windows nós temos o HAL(Hardware Abstraction Layer), no linux/MAC OSX não existe um nome específico e não é um "módulo" separado digamos assim.

    Mas enfim, para usar interrupções, você vai ter que cair no asm mesmo.

  5. #5
    é o jeito vai ser o inline mesmo.
    Agora o inline do c/c++ só usa intel ou usa a sintaxe at&t ? ou tanto faz? ou depende do compilador
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

  6. #6
    Hacker Avatar de blackwinner
    Data de Ingresso
    Dec 2006
    Localização
    Aqui
    Posts
    1.273
    Sim, é dependente do compilador.

  7. #7
    Newbie
    Data de Ingresso
    Apr 2010
    Posts
    57
    cada dia que passa parece que a assembly se afasta mais de min ( e o blackwinner sempre ajuda isso acontecer kkk)
    A vida não vale nada se você não tem uma boa história pra contar ...

  8. #8
    Membro
    Data de Ingresso
    Apr 2005
    Localização
    Spartaaaaaa
    Posts
    371
    Visto que este tópico já está esclarecido no aspecto do assembly, eu só quero frisar que para acessar o disquete você pode utilizar estes comandos abaixo:

    Linux: FILE *fd=fopen("/dev/fd0","rb+");
    Windows:FILE *fd=fopen("A:","rb+");

    Um abraço...

  9. #9
    Já quando não estamos em linux ou windows o que faremos?
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

Tópicos Similares

  1. Duvida - Manipulacao de memória
    Por mayckon no fórum Dúvidas
    Respostas: 2
    Último Post: 27 Feb 2008, 09:28
  2. [duvida] memoria virtual
    Por Watila no fórum Hardware
    Respostas: 6
    Último Post: 21 Nov 2006, 19:34

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •