⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 state.c

📁 给予GTK开发的调试工具
💻 C
📖 第 1 页 / 共 2 页
字号:
//	bfe2 - cpu state//	Copyright (c) 1999-2003 Brand Huntsman and Lee Salzman//#include "common.h"#include "functions.h"//////////////////////////////////////////////////////////////////////////// globals_cpu cpu;// localGtkWidget *r_eax_text, *r_ebx_text, *r_ecx_text, *r_edx_text;GtkWidget *r_ebp_text, *r_esi_text, *r_edi_text, *r_esp_text;GtkWidget *r_eflags_text, *r_eip_text, *stack_label;GtkWidget *r_cs_text, *r_ss_text, *r_ds_text, *r_es_text, *r_fs_text, *r_gs_text;GtkWidget *r_tr_text, *r_ldtr_text, *r_gdtr_text, *r_idtr_text;GtkWidget *r_dr0_text, *r_dr1_text, *r_dr2_text, *r_dr3_text;GtkWidget *r_dr4_text, *r_dr5_text, *r_dr6_text, *r_dr7_text;GtkWidget *r_tr3_text, *r_tr4_text, *r_tr5_text, *r_tr6_text, *r_tr7_text;GtkWidget *r_cr0_text, *r_cr1_text, *r_cr2_text, *r_cr3_text, *r_cr4_text;GtkCList *stack_list, *eflags_list;#define STACK_COLUMN_TITLES 3gchar *stack_column_titles[] = { "ESP", "Value", "EBP" };#define EFLAGS_COLUMN_TITLES 2gchar *eflags_column_titles[] = { "", "" };//////////////////////////////////////////////////////////////////////////static GtkWidget *new_vbox_1( GtkWidget *box ){	GtkWidget *vbox;	vbox = gtk_vbox_new(FALSE, 1);	gtk_box_pack_start(GTK_BOX(box), vbox, FALSE, FALSE, 0);	gtk_widget_show(vbox);	return(vbox);}static GtkWidget *new_label_and_entry( GtkWidget *box, char *name, uint width ){	GtkWidget *hbox, *text;	hbox = new_hbox(box, FALSE);	new_label(hbox, TRUE, name, FALSE);	text = new_text_entry(hbox, FALSE, width);	gtk_entry_set_editable(GTK_ENTRY(text), FALSE);	return(text);}static GtkCList *new_sized_list( GtkWidget *box, uint columns, gchar *titles[], uint width, uint height ){	GtkWidget *scrolled_window;	GtkCList *list;	uint x;	// create scrolled window	scrolled_window = gtk_scrolled_window_new(NULL, NULL);	gtk_widget_set_usize(scrolled_window, width, height);	gtk_container_set_border_width(GTK_CONTAINER(scrolled_window), 0);	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);	gtk_box_pack_start(GTK_BOX(box), scrolled_window, TRUE, TRUE, 0);	gtk_widget_show(scrolled_window);	// create list	list = (GtkCList *)gtk_clist_new_with_titles(columns, titles);	for(x = 0; x < columns; x++)		gtk_clist_set_column_auto_resize(list, x, TRUE);	gtk_clist_set_selection_mode(list, GTK_SELECTION_SINGLE);	gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(list));	gtk_widget_show(GTK_WIDGET(list));	gtk_clist_column_titles_hide(list);	return(list);}uint virtual_to_physical( s_segment *segment, uint32 offset , uint32 *physical ){	uint32 limit, base;	if(!segment->valid) return(0);	limit = (segment->descriptor[0] & 0xffff) + (segment->descriptor[1] & 0xf0000);	if((segment->descriptor[1] & 0x400000) != 0) limit = limit << 12;	base = (segment->descriptor[0] >> 16) + ((segment->descriptor[1] & 0xff) << 16);	base += segment->descriptor[1] & 0xff000000;	*physical = base + offset;	if((base + offset) > (base + limit)) return(0);	return(1);}void read_state( ){	if(bochs_offline || bochs_running) return;	fprintf(writepipe, "dump_cpu\n");	fscanf(readpipe,		" eax:%x\nebx:%x\necx:%x\nedx:%x\n"		"ebp:%x\nesi:%x\nedi:%x\nesp:%x\n"		"eflags:%x\neip:%x\n"		"cs:s=%x, dl=%x, dh=%x, valid=%u\n"		"ss:s=%x, dl=%x, dh=%x, valid=%u\n"		"ds:s=%x, dl=%x, dh=%x, valid=%u\n"		"es:s=%x, dl=%x, dh=%x, valid=%u\n"		"fs:s=%x, dl=%x, dh=%x, valid=%u\n"		"gs:s=%x, dl=%x, dh=%x, valid=%u\n"		"ldtr:s=%x, dl=%x, dh=%x, valid=%u\n"		"tr:s=%x, dl=%x, dh=%x, valid=%u\n"		"gdtr:base=%x, limit=%x\n"		"idtr:base=%x, limit=%x\n"		"dr0:%x\ndr1:%x\ndr2:%x\ndr3:%x\n"//		"dr4:%x\ndr5:%x\n"		"dr6:%x\ndr7:%x\n"		"tr3:%x\ntr4:%x\ntr5:%x\ntr6:%x\ntr7:%x\n"		"cr0:%x\ncr1:%x\ncr2:%x\ncr3:%x\ncr4:%x\n"		"inhibit_mask:%u\ndone\n",		&cpu.eax, &cpu.ebx, &cpu.ecx, &cpu.edx,		&cpu.ebp, &cpu.esi, &cpu.edi, &cpu.esp,		&cpu.eflags, &cpu.eip,		&cpu.cs.segment, &cpu.cs.descriptor[0], &cpu.cs.descriptor[1], &cpu.cs.valid,		&cpu.ss.segment, &cpu.ss.descriptor[0], &cpu.ss.descriptor[1], &cpu.ss.valid,		&cpu.ds.segment, &cpu.ds.descriptor[0], &cpu.ds.descriptor[1], &cpu.ds.valid,		&cpu.es.segment, &cpu.es.descriptor[0], &cpu.es.descriptor[1], &cpu.es.valid,		&cpu.fs.segment, &cpu.fs.descriptor[0], &cpu.fs.descriptor[1], &cpu.fs.valid,		&cpu.gs.segment, &cpu.gs.descriptor[0], &cpu.gs.descriptor[1], &cpu.gs.valid,		&cpu.ldtr.segment, &cpu.ldtr.descriptor[0], &cpu.ldtr.descriptor[1], &cpu.ldtr.valid,		&cpu.tr.segment, &cpu.tr.descriptor[0], &cpu.tr.descriptor[1], &cpu.tr.valid,		&cpu.gdtr.base, &cpu.gdtr.limit,		&cpu.idtr.base, &cpu.idtr.limit,		&cpu.dr0, &cpu.dr1, &cpu.dr2, &cpu.dr3,//		&cpu.dr4, &cpu.dr5,		&cpu.dr6, &cpu.dr7,		&cpu.tr3, &cpu.tr4, &cpu.tr5, &cpu.tr6, &cpu.tr7,		&cpu.cr0, &cpu.cr1, &cpu.cr2, &cpu.cr3, &cpu.cr4,		&cpu.inhibit);	prompt_read();}void add_flag( uint value, char *name ){	char temp[2], *row[EFLAGS_COLUMN_TITLES];	snprintf(temp, 2, "%u", value);	row[0] = temp;	row[1] = name;	gtk_clist_append(eflags_list, row);}//////////////////////////////////////////////////////////////////////////void stateInit( GtkWidget *hbox ){	GtkWidget *vbox;	vbox = new_vbox_1(hbox);	stack_label = new_label(vbox, TRUE, "Stack", FALSE);	stack_list = new_sized_list(vbox, STACK_COLUMN_TITLES, stack_column_titles, STACK_LIST_W, STACK_LIST_H);	gtk_clist_column_titles_show(stack_list);	r_dr0_text = new_label_and_entry(vbox, "DR0", WLEN_REGISTER);	r_dr1_text = new_label_and_entry(vbox, "DR1", WLEN_REGISTER);	r_dr2_text = new_label_and_entry(vbox, "DR2", WLEN_REGISTER);	r_dr3_text = new_label_and_entry(vbox, "DR3", WLEN_REGISTER);//	r_dr4_text = new_label_and_entry(vbox, "DR4", WLEN_REGISTER);//	r_dr5_text = new_label_and_entry(vbox, "DR5", WLEN_REGISTER);	r_dr6_text = new_label_and_entry(vbox, "DR6", WLEN_REGISTER);	r_dr7_text = new_label_and_entry(vbox, "DR7", WLEN_REGISTER);	/////////////////////////////////////////////	vbox = new_vbox_1(hbox);	r_eax_text = new_label_and_entry(vbox, "EAX", WLEN_REGISTER);	r_ebx_text = new_label_and_entry(vbox, "EBX", WLEN_REGISTER);	r_ecx_text = new_label_and_entry(vbox, "ECX", WLEN_REGISTER);	r_edx_text = new_label_and_entry(vbox, "EDX", WLEN_REGISTER);	r_ebp_text = new_label_and_entry(vbox, "EBP", WLEN_REGISTER);	r_esi_text = new_label_and_entry(vbox, "ESI", WLEN_REGISTER);	r_edi_text = new_label_and_entry(vbox, "EDI", WLEN_REGISTER);	r_esp_text = new_label_and_entry(vbox, "ESP", WLEN_REGISTER);	new_gap(vbox);	r_tr3_text = new_label_and_entry(vbox, "TR3", WLEN_REGISTER);	r_tr4_text = new_label_and_entry(vbox, "TR4", WLEN_REGISTER);	r_tr5_text = new_label_and_entry(vbox, "TR5", WLEN_REGISTER);	r_tr6_text = new_label_and_entry(vbox, "TR6", WLEN_REGISTER);	r_tr7_text = new_label_and_entry(vbox, "TR7", WLEN_REGISTER);	/////////////////////////////////////////////	vbox = new_vbox_1(hbox);	r_eflags_text = new_label_and_entry(vbox, "EFLAGS", WLEN_REGISTER);	r_eip_text = new_label_and_entry(vbox, "EIP", WLEN_REGISTER);	r_cs_text = new_label_and_entry(vbox, "CS", WLEN_SEGMENT);	r_ss_text = new_label_and_entry(vbox, "SS", WLEN_SEGMENT);	r_ds_text = new_label_and_entry(vbox, "DS", WLEN_SEGMENT);	r_es_text = new_label_and_entry(vbox, "ES", WLEN_SEGMENT);	r_fs_text = new_label_and_entry(vbox, "FS", WLEN_SEGMENT);	r_gs_text = new_label_and_entry(vbox, "GS", WLEN_SEGMENT);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -