Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с адресами / 7 сообщений из 7, страница 1 из 1
23.03.2017, 21:09
    #39426084
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с адресами
Всем привет. Возможно ли как то работать в vb6.0 c адресами, как в си, например, такого типа 0xF97CFF8A?
...
Рейтинг: 0 / 0
23.03.2017, 22:04
    #39426113
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с адресами
VarPtr/StrPtr ?
...
Рейтинг: 0 / 0
23.03.2017, 22:25
    #39426115
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с адресами
На си это выглядит так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
/* by munjeni @ 2017 */

#ifdef _WIN32
	#define __USE_MINGW_ANSI_STDIO 1
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#ifdef HAS_STDINT_H
	#include <stdint.h>
#endif
#ifdef unix
	#include <unistd.h>
	#include <sys/types.h>
	#include <sys/stat.h>
#else
	#include <direct.h>
	#include <io.h>
#endif

#define MAGIC 0xF97CFF8A

#define S_IFMT	  00170000
#define S_IFSOCK	0140000
#define S_IFLNK		0120000
#define S_IFREG		0100000
#define S_IFBLK		0060000
#define S_IFDIR		0040000
#define S_IFCHR		0020000
#define S_IFIFO		0010000
#define S_ISUID		0004000
#define S_ISGID		0002000
#define S_ISVTX		0001000

#define S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK)
#define S_ISREG(m)	(((m) & S_IFMT) == S_IFREG)
#define S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
#define S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR)
#define S_ISBLK(m)	(((m) & S_IFMT) == S_IFBLK)
#define S_ISFIFO(m)	(((m) & S_IFMT) == S_IFIFO)
#define S_ISSOCK(m)	(((m) & S_IFMT) == S_IFSOCK)

char *mode_to_string(unsigned int mode)
{
	if (S_ISBLK(mode))
		return "-b";
	else if (S_ISCHR(mode))
		return "-c";
	else if (S_ISDIR(mode))
		return "-d";
	else if (S_ISFIFO(mode))
		return "-p";
	else if (S_ISLNK(mode))
		return "-l";
	else if (S_ISSOCK(mode))
		return "-s";
	else if (S_ISREG(mode))
		return "--";
	else
		return "";
}

int main(int argc, char *argv[])
{
	unsigned int selinux_vers;
	unsigned int nothing;
	unsigned int i;
	unsigned int steams;
	unsigned int num_of_regex;

	char steam[256];
	char src[512];
	char context[512];

	FILE *fp = NULL;
	FILE *fpout = NULL;

	if (argc != 3) {
		printf("usage: %s BINARY_FILE OUTPUT_TEXT_FILE\n", argv[0]);
		printf("e.g: %s file_contexts.bin file_contexts\n", argv[0]);
		return 1;
	}

	if ((fp = fopen(argv[1], "rb")) == NULL) {
		printf("Unable to open %s : ", argv[1]);
		perror("");
		return 1;
	}
	fread(¬hing, 1, 4, fp);
	if (nothing != MAGIC) {
		printf("%s is not a binary!\n", argv[1]);
		if (fp) fclose(fp);
		return 1;
	}

	fread(¬hing, 1, 4, fp);
  selinux_vers = nothing;
	fread(¬hing, 1, 4, fp);
	fseek(fp, (unsigned int)ftell(fp) + nothing, SEEK_SET);

	fread(¬hing, 1, 4, fp);
	//printf("num of steams: 0x%x\n", nothing);

	for (i=0; i<nothing; ++i) {
		fread(&steams, 1, 4, fp);
  	fread(steam, 1, steams+1, fp);
		//printf("%s\n", steam);
	}

	fread(&num_of_regex, 1, 4, fp);
	//printf("num of regex: 0x%x\n", num_of_regex);

	if ((fpout = fopen(argv[2], "wb")) == NULL) {
		printf("unable to open %s for write!\n", argv[2]);
		if (fp) fclose(fp);
		return 1;
	}

  //printf("selinux version: %d\n", selinux_vers);
  fprintf(fpout, "#context version %d\n", selinux_vers);

	for (i=0; i<num_of_regex; ++i) {
		fread(¬hing, 1, 4, fp);
  	fread(context, 1, nothing, fp);
    fread(¬hing, 1, 4, fp);
    fread(src, 1, nothing, fp);
		//printf("%s %s\n", src, context);
		fread(¬hing, 1, 4, fp);
		fprintf(fpout, "%s\t%s\t%s\n", src, mode_to_string(nothing), context);
  	fseek(fp, (unsigned int)ftell(fp) + 12, SEEK_SET);
		fread(¬hing, 1, 4, fp);
    fseek(fp, (unsigned int)ftell(fp) + nothing, SEEK_SET);
		fread(¬hing, 1 , 4, fp);
    fread(¬hing, 1 , 4, fp);
    fseek(fp, (unsigned int)ftell(fp) + nothing - 4, SEEK_SET);
	}

	if (fp) fclose(fp);
	if (fpout) fclose(fpout);

	return 0;
}


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
24.03.2017, 11:29
    #39426389
Работа с адресами
BlackeAngel,

и зачем для операций с файлами и строками работать с адресами памяти?

P.S. Обращение к адресу 0xF97CFF8A в 32-разрядной системе из 3-го кольца привилегий (user mode) приведёт к Access violation.
...
Рейтинг: 0 / 0
24.03.2017, 13:05
    #39426491
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с адресами
13-й квартал,
А я и не говорил что с адресами памяти. Я написал с адресами. И адресами файла имелось в виду.
...
Рейтинг: 0 / 0
24.03.2017, 14:56
    #39426574
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с адресами
BlackeAngel , пока ты ничего вменяемого не сказал. Главным образом, непонятно, что ты хочешь получить в итоге, какая собственно ставится задача.
...
Рейтинг: 0 / 0
24.03.2017, 15:56
    #39426624
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с адресами
Akina,

Мне нужно понять этот сишный код и переписать его.
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1254533&msg=20327799
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с адресами / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]