mirror of
https://github.com/yourtion/30dayMakeOS.git
synced 2026-02-05 11:03:22 +08:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
575c4ffce8 | ||
|
|
f3f9a6c178 |
@@ -164,10 +164,17 @@ color2.bim : color2.obj a_nask.obj Makefile
|
||||
color2.hrb : color2.bim Makefile
|
||||
$(BIM2HRB) color2.bim color2.hrb 56k
|
||||
|
||||
crack7.bim : crack7.obj Makefile
|
||||
$(OBJ2BIM) @$(RULEFILE) out:crack7.bim stack:1k map:crack7.map crack7.obj
|
||||
|
||||
crack7.hrb : crack7.bim Makefile
|
||||
$(BIM2HRB) crack7.bim crack7.hrb 0k
|
||||
|
||||
haribote.img : ipl10.bin haribote.sys Makefile \
|
||||
hello.hrb hello2.hrb a.hrb hello3.hrb hello4.hrb hello5.hrb \
|
||||
winhelo.hrb winhelo2.hrb winhelo3.hrb star1.hrb stars.hrb stars2.hrb \
|
||||
lines.hrb walk.hrb noodle.hrb beepdown.hrb color.hrb color2.hrb
|
||||
lines.hrb walk.hrb noodle.hrb beepdown.hrb color.hrb color2.hrb \
|
||||
crack7.hrb
|
||||
$(EDIMG) imgin:../z_tools/fdimg0at.tek \
|
||||
wbinimg src:ipl10.bin len:512 from:0 to:0 \
|
||||
copy from:haribote.sys to:@: \
|
||||
@@ -191,6 +198,7 @@ haribote.img : ipl10.bin haribote.sys Makefile \
|
||||
copy from:beepdown.hrb to:@: \
|
||||
copy from:color.hrb to:@: \
|
||||
copy from:color2.hrb to:@: \
|
||||
copy from:crack7.hrb to:@: \
|
||||
imgout:haribote.img
|
||||
|
||||
# 其他指令
|
||||
|
||||
@@ -88,15 +88,16 @@ struct GATE_DESCRIPTOR {
|
||||
void init_gdtidt(void);
|
||||
void set_segmdesc(struct SEGMENT_DESCRIPTOR *sd, unsigned int limit, int base, int ar);
|
||||
void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar);
|
||||
#define ADR_IDT 0x0026f800
|
||||
#define LIMIT_IDT 0x000007ff
|
||||
#define ADR_GDT 0x00270000
|
||||
#define LIMIT_GDT 0x0000ffff
|
||||
#define ADR_IDT 0x0026f800
|
||||
#define LIMIT_IDT 0x000007ff
|
||||
#define ADR_GDT 0x00270000
|
||||
#define LIMIT_GDT 0x0000ffff
|
||||
#define ADR_BOTPAK 0x00280000
|
||||
#define LIMIT_BOTPAK 0x0007ffff
|
||||
#define AR_DATA32_RW 0x4092
|
||||
#define AR_CODE32_ER 0x409a
|
||||
#define AR_TSS32 0x0089
|
||||
#define AR_LDT 0x0082
|
||||
#define AR_TSS32 0x0089
|
||||
#define AR_INTGATE32 0x008e
|
||||
|
||||
/* int.c */
|
||||
@@ -210,6 +211,7 @@ struct TASK {
|
||||
int level, priority; /* 优先级 */
|
||||
struct FIFO32 fifo;
|
||||
struct TSS32 tss;
|
||||
struct SEGMENT_DESCRIPTOR ldt[2];
|
||||
struct CONSOLE *cons;
|
||||
int ds_base, cons_stack;
|
||||
};
|
||||
|
||||
@@ -373,12 +373,12 @@ int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline)
|
||||
dathrb = *((int *) (p + 0x0014));
|
||||
q = (char *) memman_alloc_4k(memman, segsiz);
|
||||
task->ds_base = (int) q;
|
||||
set_segmdesc(gdt + task->sel / 8 + 1000, finfo->size - 1, (int) p, AR_CODE32_ER + 0x60);
|
||||
set_segmdesc(gdt + task->sel / 8 + 2000, segsiz - 1, (int) q, AR_DATA32_RW + 0x60);
|
||||
set_segmdesc(task->ldt + 0, finfo->size - 1, (int) p, AR_CODE32_ER + 0x60);
|
||||
set_segmdesc(task->ldt + 1, segsiz - 1, (int) q, AR_DATA32_RW + 0x60);
|
||||
for (i = 0; i < datsiz; i++) {
|
||||
q[esp + i] = p[dathrb + i];
|
||||
}
|
||||
start_app(0x1b, task->sel + 1000 * 8, esp, task->sel + 2000 * 8, &(task->tss.esp0));
|
||||
start_app(0x1b, 0 * 8 + 4, esp, 1 * 8 + 4, &(task->tss.esp0));
|
||||
shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
|
||||
for (i = 0; i < MAX_SHEETS; i++) {
|
||||
sht = &(shtctl->sheets0[i]);
|
||||
|
||||
28
27_day/crack7.nas
Normal file
28
27_day/crack7.nas
Normal file
@@ -0,0 +1,28 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "crack7.nas"]
|
||||
|
||||
GLOBAL _HariMain
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_HariMain:
|
||||
MOV AX,1005*8
|
||||
MOV DS,AX
|
||||
CMP DWORD [DS:0x0004],'Hari'
|
||||
JNE fin ; 不是应用程序,因此不执行任何操作
|
||||
|
||||
MOV ECX,[DS:0x0000] ; 读取该应用程序数据段的大小
|
||||
MOV AX,2005*8
|
||||
MOV DS,AX
|
||||
|
||||
crackloop: ; 整个用123填充
|
||||
ADD ECX,-1
|
||||
MOV BYTE [DS:ECX],123
|
||||
CMP ECX,0
|
||||
JNE crackloop
|
||||
|
||||
fin: ; 结束
|
||||
MOV EDX,4
|
||||
INT 0x40
|
||||
@@ -82,7 +82,9 @@ struct TASK *task_init(struct MEMMAN *memman)
|
||||
for (i = 0; i < MAX_TASKS; i++) {
|
||||
taskctl->tasks0[i].flags = 0;
|
||||
taskctl->tasks0[i].sel = (TASK_GDT0 + i) * 8;
|
||||
taskctl->tasks0[i].tss.ldtr = (TASK_GDT0 + MAX_TASKS + i) * 8;
|
||||
set_segmdesc(gdt + TASK_GDT0 + i, 103, (int) &taskctl->tasks0[i].tss, AR_TSS32);
|
||||
set_segmdesc(gdt + TASK_GDT0 + MAX_TASKS + i, 15, (int) taskctl->tasks0[i].ldt, AR_LDT);
|
||||
}
|
||||
for (i = 0; i < MAX_TASKLEVELS; i++) {
|
||||
taskctl->level[i].running = 0;
|
||||
@@ -133,7 +135,6 @@ struct TASK *task_alloc(void)
|
||||
task->tss.ds = 0;
|
||||
task->tss.fs = 0;
|
||||
task->tss.gs = 0;
|
||||
task->tss.ldtr = 0;
|
||||
task->tss.iomap = 0x40000000;
|
||||
task->tss.ss0 = 0;
|
||||
return task;
|
||||
|
||||
Reference in New Issue
Block a user