Nuevas NORMAS para el foro
Bienvenido(a),
Visitante
. Favor de
ingresar
o
registrarse
.
¿Perdiste tu
email de activación?
- Agosto 21, 2008, 08:43:58
Boton Buscar
Visita:
Articulos
-
Juegos Gratis
-
Da Foros
Comunidad Underground Hispana
|
Programacion
|
Programación
|
Carbide C/C#/C++
| Tema:
como poner un codigo assambler en un copido en C?
0 Usuarios y 1 Visitante están viendo este tema.
« anterior
próximo »
Páginas:
[
1
]
Autor
Tema: como poner un codigo assambler en un copido en C? (Leído 1380 veces)
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
como poner un codigo assambler en un copido en C?
«
en:
Agosto 14, 2007, 05:39:58 »
hola, he leido que se puede, solo tengo que poner asm int 21 y listo (por ejemplo) pero cuando compilo (uso del dev-cpp) me da error en esa parte, como si no lo reconociera, pero lo raro es que ese mismo programa habla sobre esto (se puede cambiar el color de lo que es del assambler), entonces, como se hace?
gracias
En línea
Inside The Source Code
Linux Registred User #460377
FreakMind
Habitual
Desconectado
Mensajes: 181
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #1 en:
Agosto 14, 2007, 09:49:14 »
Buenas
Trata poniendo esto:
_asm_( << codigo asm >>);
No recuerdo si al final tambien se debia poner
Salu2, FreakMind
En línea
Connoisseurs of C semantics find C++ inferior to ++C
DarkIker
Habitual
Desconectado
Mensajes: 263
Colombia Underground Team
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #2 en:
Agosto 14, 2007, 10:25:20 »
comenzando por que el asm del dev-c++ es asm AT&T y siguiendo por que es _asm("bla bla");, siguiendo con, si no has seteado los registros debidamente int 21h no hara mucho que digamos, aparte no recuerdo si en at&t solo cambia la sintaxis o tambien las interrupciones.
Att:
DarkIker
En línea
http://www.colombiaunderground.org
--> Colombia Underground Team
http://darkiker.blogspot.com
--> My Blog
̿̿̿̿̿̿̿̿̿
Miembro
Desconectado
Mensajes: 20
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #3 en:
Agosto 15, 2007, 09:07:06 »
Cita de: DarkIker en Agosto 14, 2007, 10:25:20
aparte no recuerdo si en at&t solo cambia la sintaxis o tambien las interrupciones.
Creo que solo la sintaxis
En línea
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #4 en:
Agosto 15, 2007, 05:48:03 »
pues lo del int 21 era solo un ejemplo, puse el primer numero que se me ocurrio
salu2
En línea
Inside The Source Code
Linux Registred User #460377
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #5 en:
Agosto 15, 2007, 06:42:59 »
hola, intente hacer esto:
main()
{
int b, a = 9;
asm ("mov AX,a");
asm ("mov b,AX);
printf("%d", b);
getchar();
}
pero me selan 2 errores iguales al compilar:
"too many memory references for `mov' "
que hago? que hice mal?
En línea
Inside The Source Code
Linux Registred User #460377
DarkIker
Habitual
Desconectado
Mensajes: 263
Colombia Underground Team
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #6 en:
Agosto 15, 2007, 10:22:25 »
aprende asm AT&T eso debes de hacer
, ya que lo intentaste hacer en asm intel.
Att:
DarkIker
En línea
http://www.colombiaunderground.org
--> Colombia Underground Team
http://darkiker.blogspot.com
--> My Blog
̿̿̿̿̿̿̿̿̿
Miembro
Desconectado
Mensajes: 20
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #7 en:
Agosto 16, 2007, 11:24:30 »
Aparte tienes que meter punteros hacia la posición de memoria que quieres mover....No e programado nunca en AT&T, pero creo que es asi.
En línea
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #8 en:
Agosto 16, 2007, 02:47:51 »
hola, gracias a todos por responder, busque eso de asm at&t y aprendi algo, lo intente hacer pero...
el codigo queda asi:
main()
{
int b, a = 9;
asm ("mov a,%ax"); //tambien intente mov %a
asm ("mov %ax,b); //tambien intente mov %b
printf("%d", b);
getchar();
}
pero me da bad registrer name %a
un dia lei que se podia poner el nombre de las variables directamente, pero veo que no puedo
, como se hace?
gracias
En línea
Inside The Source Code
Linux Registred User #460377
DarkIker
Habitual
Desconectado
Mensajes: 263
Colombia Underground Team
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #9 en:
Agosto 16, 2007, 08:57:13 »
bueno tio aca te dejo un ejemplo de restar dos numeros ya de hay vos vez que haces, pero te recomendari buscar mas:
Código:
#include <stdio.h>
int main( void )
{
int ret;
_asm("movl $5, %eax");
_asm("subl $4, %eax");
_asm("movl %eax, %ret");
printf("ret %d\n",ret);
return 0;
}
Att:
DarkIker
En línea
http://www.colombiaunderground.org
--> Colombia Underground Team
http://darkiker.blogspot.com
--> My Blog
lann
Habitual
Desconectado
Mensajes: 309
maamamma
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #10 en:
Agosto 16, 2007, 09:28:03 »
16. How to use assembly with Dev-C++ ?
The assembler uses AT&T (not Intel). Here's an example of such a syntax :
// 2 global variables
int AdrIO ;
static char ValIO ;
void MyFunction(..........)
{
__asm("mov %dx,_AdrIO") ; // loading 16 bits register
__asm("mov %al,_ValIO") ; // loading 8 bits register
/*
!!!!!!!!!! Don't forget the underscore _ before each global variable names !!!!!!!!!!
*/
__asm("mov %dx,%ax") ; // AX --> DX
}
En línea
am
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #11 en:
Agosto 17, 2007, 05:13:25 »
bueno, ninguna de las 2 respuestas funcionan, si uso %a (como dije que habia usado pero = me dijeron que lo haga) sale el error: bad register name `%a'
(lo mismo para b)
si uso _a, sale:
[Linker error] undefined reference to `a'
entonces.... como se hace??
ya lo dije, pero lo digo de neuvo, uso del dev-cpp,
por ahora solo sirvio eso de asm AT&T, pero lo de usar las variables ya registradas, no
gracias de todas formas, y otra cosa, con el dev-cpp uso asm("") no _asm("")
En línea
Inside The Source Code
Linux Registred User #460377
DarkIker
Habitual
Desconectado
Mensajes: 263
Colombia Underground Team
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #12 en:
Agosto 17, 2007, 07:13:39 »
Acabo de compilar:
Código:
#include <stdio.h>
int ret;
int main()
{
asm("movl $5, %eax");
asm("subl $4, %eax");
asm("movl %eax, _ret");
printf("ret %d\n",ret);
return 0;
}
y me funciona perfecto.
Att:
DarkIker
En línea
http://www.colombiaunderground.org
--> Colombia Underground Team
http://darkiker.blogspot.com
--> My Blog
Ni0
Gran Colaborador
Desconectado
Mensajes: 1362
Ni0-inside the source code
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #13 en:
Agosto 18, 2007, 06:18:27 »
hola, gracias a todos, FUNCIONO!!!, tengo que poner _(la variable), pero porque antes me daba error??
es estupido, pero era porque declaraba en la funcion main, miren:
mi programa era asi:
main()
{
int b, a = 9; //aca declaro a a y a b
asm ("mov _a,%ax");
asm ("mov %ax,_b);
printf("%d", b);
getchar();
}
y el de DarkIker es:
int ret;//aca declara a ret
int main()
{
asm("movl $5, %eax");
asm("subl $4, %eax");
asm("movl %eax, _ret");
printf("ret %d\n",ret);
return 0;
}
mas alla de si uso subl y movl y yo mov, la direferencia estaba en donde se declaraban las variables, listo, ahora ya puedo poner un codigo assambler en C gracias a ustedes.
salu2
«
Última modificación: Agosto 18, 2007, 06:21:31 por swatnio
»
En línea
Inside The Source Code
Linux Registred User #460377
ven0m
Colaborador
Desconectado
Mensajes: 782
Christina...Eat me, drink me...
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #14 en:
Diciembre 16, 2007, 08:39:01 »
He estado buscando ya que no quiero usar la AT&T sintasis.. y me he encontrado con el MSVC++ de microsoft.. con el cual puedes escribir Inline asm en Intel.. osea algo asi:
Código:
#include <stdio.h>
void hola()
{
puts("hola");
}
int main()
{
__asm{
call hola;
}
return 0;
}
??
PS: Eso sirve llamando a las funciones.. :S ?
PS: Tambien encontre esto...
Código:
#include <stdio.h>
char format[] = "%s %s\n";
char what[] = "I am so bored";
char when[] = "today";
void main( void )
{
__asm
{
mov eax, offset when
push eax
mov eax, offset what
push eax
mov eax, offset format
push eax
call printf
pop ebx
pop ebx
pop ebx
}
}
entonces.. mi pregunta es.. podria yo hacer esto otro.. xD sin definir al principio del code? ??
Código:
#include <stdio.h>
int main()
{
__asm{
mov ah,3ch
lea dx,file
xor cx,cx
int 21h
mov ah,3eh
int 21h
mov ax,4c00h
int 21h
file db 'C:\file.txt',0
}
return 0;
}
Aqui defino alprincipio.. se puede ?
Código:
#include <stdio.h>
int main()
{
__asm{
.model tiny ; Se podria incluir
code segment ;todo esto
assume cs:code,ds:code ;<------
org 100h ;<-- sin que el MSVC me de
;errores?
mov ah,3ch ; el mismo code de arriba
}
return 0;
}
salud0s
En línea
R-E-S-P-E-C-T, find out what it means to me
Christina..Christina..Brak mi ciebie moj EMO-Princesa..BARDZO CIE KOCHAM!!!
dreams_eater
Habitual
Desconectado
Mensajes: 174
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #15 en:
Diciembre 16, 2007, 10:13:25 »
dejo un link, para los que saben sintaxis intel y no at&t como yo...
http://asm.sourceforge.net/articles/linasm.html
Que diablos haces ven0m?
Código:
#include <stdio.h>
int main()
{
__asm{
.model tiny ; Se podria incluir
code segment ;todo esto
assume cs:code,ds:code ;<------
org 100h ;<-- sin que el MSVC me de
;errores?
mov ah,3ch ; el mismo code de arriba
}
return 0;
}
el modelo de memoria lo hace automatico el compilador, hasta algunos te deja elegilo:
Busca y eligelo si tienes tanta obseción por el.
Estas organizando donde van los datos y eso lo hace el compilador (no me sorprenderia que no funcionase).
final en assembly ¿Para que?
Código:
#include <stdio.h>
int main()
{
__asm{
mov ah,3ch
lea dx,file
xor cx,cx
int 21h
mov ah,3eh
int 21h
mov ax,4c00h
int 21h
file db 'C:\file.txt',0
}
return 0;
}
Este tipo de codigos me despierta la curiosidad...
¿que diablos retorna DarkIker?
¿Como capturo lo que retorna un programa? Necesitare ayuda de un buen bachero.
Código:
#include <stdio.h>
void hola()
{
puts("hola");
}
int main()
{
__asm{
call hola;
}
return 0;
}
Este tipo de codigos tambien me despierta la curiosidad...
¿funcionará, ya que no recive argumentos o tomara la direccion de retorno (y sera un caos aleatoreo)?
«
Última modificación: Diciembre 16, 2007, 10:16:05 por dreams_eater
»
En línea
"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
DarkIker
Habitual
Desconectado
Mensajes: 263
Colombia Underground Team
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #16 en:
Diciembre 16, 2007, 11:53:34 »
en asm no se pueden llamar a las funciones con prototipos como tal, si no que sus parametros se pasan en ebp + X, normalmente o por medio de la pila, para que una funcion pueda retornar desde asm, debe tene run prejifo naked que significara que todo lo manejara en asm directamente, asi que no te hagas ilusiones con esa funcion, si le pones el prefijo debes mover el valor a retornar a eax y luego la instruccione ret, no debes definir el modelo de memoria y demas ya que este va en el la cabecera del binario la cual no sera modificada por el codigo en asm, si no en los famosos #pragma que te los dejo de tarea aprender
, normalmente el valor de retorno de un programa solo le interesa al sistema, ya que puede informar de posibles errores( naaaaa ), de restoa estudiar interrupciones y los diferentes valores que se le deben de pasar en los registros "menores"( nu me acuerdo como se llaman, si si esos que son ax, bx, etc.. y que solo son de 16 bits ).
PD: Saludos Mancurtex xDD.
Att:
DarkIker
En línea
http://www.colombiaunderground.org
--> Colombia Underground Team
http://darkiker.blogspot.com
--> My Blog
ven0m
Colaborador
Desconectado
Mensajes: 782
Christina...Eat me, drink me...
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #17 en:
Diciembre 17, 2007, 07:19:35 »
Pos dreams_eater hola
hehe bueno te digo que esos codigos los saque de una pagina de programadores alemanes.. habia un chico que hizo la misma pregunta que mi amigo Ni0... y las respuestas que le dieron fueron basadas al compilador MSVC++ de mocosoft... bueno yo me baje ese compi para probar esos codigos.. pero ese compilador es una *ierda... todavia no se si funcionan.. mejor me quedo con mi querido DEV C++.. y veo como agregar el primer hola mundo a C con AT&T...
PS: Los codigos que postee arriba segun estos alemanes compilan y corren sin error...
oye DarkIker.. estoy leyendo sobre #pragma.. esto encontre
Para todos --- >
http://msdn2.microsoft.com/en-us/library/d9x1s805(vs.71).aspx
salud0s
En línea
R-E-S-P-E-C-T, find out what it means to me
Christina..Christina..Brak mi ciebie moj EMO-Princesa..BARDZO CIE KOCHAM!!!
ven0m
Colaborador
Desconectado
Mensajes: 782
Christina...Eat me, drink me...
Re: como poner un codigo assambler en un copido en C?
«
Respuesta #18 en:
Diciembre 17, 2007, 10:40:19 »
Bueno al darme cuenta que MSVC++ es una *ierda.. me quedo con el DEV C++ ya que entendi la sintasis del AT&T... ( eso creo.. )... y para comprobarlo dejo un code..
Código:
#include <stdio.h>
int xwin;
int main()
{
asm("movl $0x3c, %eax");
asm("leal _xwin, %edx");
asm("xorl %ecx, %ecx");
asm("int $0x21");
asm("movl $0x3e, %eax");
asm("int $0x21");
asm("movl $0x4c, %eax");
asm("int $0x21");
}
lo posteo y pregunto una cosita que no se como hacer con C y ASM...
lo que quiero es que que xwin se cree en C:\... en asm intel se como hacerlo..
Código:
.model tiny
code segment
assume cs:code,ds:code
org 100h
start:
mov ah,3ch
;Creamos xwin
lea dx,xwin
;Puntero para nombre del archivo
xor cx,cx
;Mire abajo
int 21h
mov ah,3eh ;Cerramos por ahora..
int 21h
ende:
mov ax,4c00h ;Le deja el control a dos :D
int 21h
xwin db 'C:\xWin.com',0 ;Definimos o creamos el archivo en C:\
code ends
end start
Como podria crear xwin en el directorio de mi elegir ?? ?? tendria que crear una funcion en C para que xwin se cree alli y llamar esa funcion desde asm ?? o como se hace ??
salud0s
En línea
R-E-S-P-E-C-T, find out what it means to me
Christina..Christina..Brak mi ciebie moj EMO-Princesa..BARDZO CIE KOCHAM!!!
dreams_eater
Habitual
Desconectado
Mensajes: 174
Otra vez assembly en C
«
Respuesta #19 en:
Diciembre 17, 2007, 11:32:46 »
Citar
en asm no se pueden llamar a las funciones con prototipos como tal, si no que sus parametros se pasan en ebp + X, normalmente o por medio de la pila,
Quieres decir que los argumentos estan guardados en la pila (seguido de la direccion de retorno)
igualás ebp=esp, y accedes a los argumentos, sin la necesidad de engorrosos push y pop.
Citar
para que una funcion pueda retornar desde asm, debe tene run prejifo naked que significara que todo lo manejara en asm directamente, asi que no te hagas ilusiones con esa funcion, si le pones el prefijo debes mover el valor a retornar a eax y luego la instruccione ret,
prefijo??
Evidentemente no tengo nada que hacer aca, ya que, no se nada de asm modo protregido. (solo modo real).
En línea
"La juventud envejece, la inmadurez se supera, la ignorancia puede educarse, y la borrachera desperjarse, pero la estupidez dura para siempre" - Aristófanes
Páginas:
[
1
]
Comunidad Underground Hispana
|
Programacion
|
Programación
|
Carbide C/C#/C++
| Tema:
como poner un codigo assambler en un copido en C?
« anterior
próximo »
Ir a:
Por favor selecciona un destino:
-----------------------------
Foros De Consulta General
-----------------------------
=> Novedades
=> Dudas, Comentarios Y Sugerencias
=> Top 100
=> Off-Topic
=> Revista E-Zine
===> Noticias
-----------------------------
Phreaking, Hacking y Seguridad
-----------------------------
=> HacK GeneraL
===> Ingenieria Inversa
===> Encriptacion, Cryptografia
===> TV HACK
===> Seguridad
===> Cursos y Ezines
=====> Trucos Internet
=====> Textos Hacking
===> Defacing
=> Phreaking
===> Moviles
=> Bug y Exploits
-----------------------------
Hack Novato
-----------------------------
=> Hack para newbies
=> Todo Messenger
=> Troyanos y virus
-----------------------------
Sistemas Operativos
-----------------------------
=> Windows y otros sistemas operativos no libres
===> Problemas Tecnicos Windows
=> Sistemas operativos libres.
===> GNU/Linux
===> Manuales y Tutoriales
===> Descargas
-----------------------------
Programacion
-----------------------------
=> Programación
===> Programación Basica
===> Otros Lenguajes
===> Visual Basic y Net
===> ASM
===> Programacion Shell
===> Perl
===> Carbide C/C#/C++
===> Batch
===> SQL
=> Programacion para webmasters
===> Consultas
===> Php
===> Html
===> Java - Java Script
===> Php Nuke
===> Scripts Pre-Fabricados
===> Mysql
===> CSS y Diseño Web
-----------------------------
Artes Graficas
-----------------------------
=> Diseño Grafico
===> Battle Arts
===> Flash
===> Tutoriales
===> Galerías
===> Software
-----------------------------
Area Tecnica
-----------------------------
=> Networking & Wireless
=> Overclocking, Refrigeracion y demas
=> Hardware
===> Cursos Y manuales
=> Electronica Y Robotica
-----------------------------
Programas
-----------------------------
=> Software
===> Configuraciones de software
===> Pedidos de software
=> Cracks & Serialz
=> P2p, Bittorrent, Elinks
-----------------------------
Multimedia Y Divx
-----------------------------
=> Juegos PC Y Consolas
===> Dudas ayudas y comentarios de juegos
===> Pedidos de juegos
=> Mp3
=> Multimedia
=> Peliculas Divx
-----------------------------
Entretenimiento Y sitios de interes
-----------------------------
=> Juegos, Humor y Adultos. (Diversión)
===> Adultos
=> Paginas Webs Recomendadas
=> Videos
Powered by SMF 1.1.5
|
SMF © 2006-2007, Simple Machines LLC
Loading...