¿Cómo funciona la implementación DOS de Solar Designer de ‘mkdir -p’?

“Reciente” Phrack?!? Me alegra ver que todavía está en línea, pero eso salió hace unos 25 años.

Para entenderlo, debe convertirlo en lenguaje ensamblador y leerlo. En 1991, podría escribir “DEPURAR”, ingresar el hexadecimal y luego enumerarlo. Aún puede, pero ahora necesita DOSBox.

Ahora espera que le cuente cómo funciona, supongo.

“MOV DX, 0082” apunta el registro DX al búfer de la línea de comando de MSDOS, donde presumiblemente se ingresó el nombre deseado cuando se invocó el programa. El “POP DI” en 103 saca un parámetro de la pila, uno que el lanzador empuja allí. Creo que es la dirección del primer parámetro de línea de comando, pero no puedo encontrar mi libro de referencia de MSDOS para asegurarme. Lo que esté en esa dirección se XORed con “\” (5C), el primer carácter de un nombre de subdirectorio. El “39” se explicará más adelante, en este momento no hace nada importante. Luego, la instrucción SCASB se repite hasta que el carácter en ES: DI coincide con AL, que es 5C (barra invertida). El registro de puntero DI se vuelve a ajustar, luego se vuelve XOR – ya que esto es 5C en memoria siendo XOR con 5C en AL, el resultado es cero. La cadena en la memoria en [DI] ha terminado en cero.

Luego hacemos un INT 21: esta es la interrupción principal de MSDOS que hace cosas. Lo que hace depende del valor en AH, que es 39 (establecido en la dirección 104). Normalmente lo cargaríamos con 39 aquí mismo, pero el autor lo cargó al mismo tiempo que cargó AL con 5C para guardar un byte. Inteligente.

El código INT 21 39 es el comando “Crear subdirectorio”. Espera que DS: DX apunte a una cadena terminada en cero, que es el nuevo nombre del subdirectorio. DX se configuró al principio, DS se configuró para apuntar a alguna parte . Si desea seguir adelante, tendrá que encontrar una referencia de MSDOS que explique lo que sucede cuando escribe un nombre de programa con una variable de línea de comando, pero lo anterior debería llevarlo la mayor parte del camino.

More Interesting

¿Alguien puede escribir una función Javascript que haga esto: add (1) (2) (8) debería devolver 11, es decir, la suma de los argumentos dados (el número de argumentos puede ser cualquier número natural)?

¿Cómo se puede determinar la coincidencia más cercana de un vector dado entre un conjunto de vectores si el origen de los vectores también es importante?

Si el Universo se restableciera al estado en el que acaba de comenzar, ¿podría el mundo ser diferente después de exactamente la misma cantidad de tiempo que la edad del Universo ahora? ¿O sería exactamente lo mismo?

¿Qué es la matemática profanada y dónde se usa?

¿Cuándo usamos los sistemas numéricos decimal, binario, octal y hexadecimal?

¿Qué pasaría si todos olvidaran cómo codificar en un instante?

¿Cómo calculo la probabilidad de que alguien compre mi spray de calvicie?

¿P = NP sería algo bueno?

¿Necesitaríamos resolver P vs. NP como prerrequisito en el diseño de inteligencia general artificial?

¿Cómo escribirías un programa que pueda calcular los dígitos de phi (proporción áurea)?

¿Alguien puede escribir un algoritmo no determinista (pseudocódigo) para encontrar la suma de los primeros n números naturales?

¿Por qué el costo amortizado de las operaciones n add (k) es log (k)?

Para prepararse para la investigación en informática teórica, ¿es mejor estudiar matemática o informática como estudiante universitario?

¿Qué tipos de matemáticas son las más destacadas en informática?

¿Cómo es tomar CS 221 (Inteligencia Artificial) en Stanford?