我的linux系统上有这个二进制文件..
udit@udit-Dabba ~ $ cat file.enc
Salted__s?bO??<0?F???Jw!???]?:`C?LK??l
Run Code Online (Sandbox Code Playgroud)
使用hexdump命令我看到这样的信息..
udit@udit-Dabba ~ $ hexdump -C file.enc
00000000 53 61 6c 74 65 64 5f 5f 1b 73 a1 62 4f 15 be f6 |Salted__.s.bO...|
00000010 3c 30 cc 46 ee 10 13 11 84 bf 4a 77 21 a4 84 99 |<0.F......Jw!...|
00000020 0e 5d ef 11 18 3a 60 43 a0 4c 4b 1e c8 86 e6 6c |.]...:`C.LK....l|
00000030
Run Code Online (Sandbox Code Playgroud)
现在我给了一个其他系统的文件,其内容是这样的..
53 61 6c 74 65 64 5f 5f 1b 73 …Run Code Online (Sandbox Code Playgroud) ....
finalize(char *hdrs, sendip_data *headers[], int index,
sendip_data *data, sendip_data *pack)
{
........
Run Code Online (Sandbox Code Playgroud)
出于调试目的,我想要一个data和pack类型的十六进制转储,它们是sendip_data一种非常复杂的结构.实际上它们包含一些二进制信息,所以我不确定我的项目的输出是否正确.因此,出于调试目的,我想将数据写入文件,以便我可以使用hexdump,如下所示 -
$hexdump -C file.txt
Run Code Online (Sandbox Code Playgroud)
另外因为这是一个/ w数据包的运行时生成所以我也不确定我认为需要的长度data和pack结构fread / fwrite.所以请给我一些建议.
当我试图执行我的程序时它得到的错误是这样的 -
sendip: malloc.c:4631: _int_malloc: Assertion `(unsigned long)(size)
>= (unsigned long)(nb)' failed
Run Code Online (Sandbox Code Playgroud)
通过valgrind尝试捕获错误,得到了这个 -
HEAP SUMMARY:
==3335== in use at exit: 24 bytes in 2 blocks
==3335== total heap usage: 111 allocs, 109 frees, 7,929 bytes allocated
==3335==
==3335== 4 bytes in 1 blocks are definitely lost in loss record 1 of 2
==3335== at 0x40268A4: malloc (vg_replace_malloc.c:236)
==3335== by 0x8049EEF: main (sendip.c:435)
==3335==
==3335== 20 bytes in 1 blocks are definitely lost in loss record 2 of 2
==3335== …Run Code Online (Sandbox Code Playgroud) 我已经使用了两者,并且我得出结论,我可以使用tcpflow从网页读取html数据,但不能使用tcpdump.我得到的最好的是一些带有大量句号的丑陋ASCII文本.
我的理解是tcpdump不会重新组装数据包,而tcpflow会这样做.但如果这是关键的区别,那么来自tcpdump的数据包数据是否仍然是人类可读的 - 只是在较小的块中?问题是tcpdump仅限于ASCII,大多数网络流量是以UTF-8编码的吗?
我是网络分析/编程的新手,如果我遗漏了一些明显的东西,请原谅我.
作为序言,我真的不想要解决我的问题,只需要指导.我不希望你给我代码.这不是家庭作业,它只是我想要解决的一项练习.
我只是想告诉我如何访问VDU并直接在同一屏幕上更改字符.
屏幕分为25行和80列.屏幕上显示的字符存储在称为VDU存储器的特殊存储器中(不要与普通存储器混淆).屏幕上显示的每个字符占用VDU存储器中的两个字节.
这些字节中的第一个包含正在显示的字符的ASCII值,而第二个字节包含显示字符的颜色.例如,屏幕上第0行和第0列上出现的字符的ASCII值存储在位置编号中0xB8000000.
因此,该字符的颜色将出现在位置编号处0xB8000000 + 1.类似地,第0行中字符的ASCII值,第1列将位于其位置0xB8000000 + 2,其颜色位于0xB8000000 + 3.
我的任务:
有了这些知识就可以编写一个程序,该程序在执行时会将屏幕上的每个大写字母转换成小写字母和每个小写字母大写字母.当用户从键盘敲击键时,该过程应该停止.这是一种名为Dancing Dolls的猖獗病毒活动.(对于单色适配器,请使用0xB0000000而不是0xB8000000).
真的,我不知道构建这个代码.我甚至开始坚持.
我已经开始为我的操作系统课程寻找 linux 内核代码。我对 sys 文件系统 (sysfs) 感兴趣。我有兴趣了解 sysfs 何时以及如何创建?linux内核代码中的哪些文件生成了这个文件系统?
我已经在我的系统上设置了 linux 内核并开始通过代码进行调试。
我参考了这个文档来了解 sysfs 文件系统: [sysfs] : https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt
但是本文档只解释了目录结构、目录的创建和读/写属性。我对内核如何在引导期间创建这些目录更感兴趣。我知道以下方法负责在 sysfs 中创建目录。
int sysfs_create_file(struct kobject *kobj, struct attribute *attr);
Run Code Online (Sandbox Code Playgroud)
此函数接受 kboject 结构、属性并使用这些在 sysfs 中创建目录。
我知道在启动时,内核会检测内存并在 sys/devices/system/memory 下创建目录。我计划更改此目录结构作为我作业的一部分。那么,能否请您指出负责创建此特定内存目录的文件和方法?
经过长时间休息,我回到了C,但即使在一些简单的问题上也会感到困惑.所以一个人在这里.
这是简单的代码:
#include<stdio.h>
int main() {
char str1[]="hello";
char str2[]="hello";
if(str1==str2)
printf("equal");
else
printf("unequal");
}
Run Code Online (Sandbox Code Playgroud)
产出: 不平等
但是当我尝试这个时,它起作用了
char *str1="hello";
char *str2="hello";
Run Code Online (Sandbox Code Playgroud)
输出 相等
如果有人能提供详细的解释,请.谁能告诉我C99标准究竟是怎么说的?
我遇到了这个Makefile(是通过一个名为sendip的开源项目找到的)
我对此文件有两个困惑-
.c文件在哪里被指定为依赖项?虽然所有像图书馆ipv6.so,tcp.so正在生成细,但此行是负责呢?我认为这是行.....对吗?
%.so: %.c $(LIBS)
$(CC) -o $@ $(CFLAGS) $(LIBCFLAGS) $+ $(LIBS)
Run Code Online (Sandbox Code Playgroud)
但$(LIBS)只指定一些.o文件。这是$+在做什么吗?
2,我从未听说过$+。我试图找到它,并在许多人来了,如同$?,$@,$<等,但从来没有见过这个。我认为它的行为类似,$?但仍然需要.c指定依赖关系。
生成文件:
#configureable stuff
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
MANDIR ?= $(PREFIX)/share/man/man1
LIBDIR ?= $(PREFIX)/lib/sendip
#For most systems, this works
INSTALL ?= install
#For Solaris, you may need
#INSTALL=/usr/ucb/install
CFLAGS= -fPIC -fsigned-char -pipe -Wall -Wpointer-arith -Wwrite-strings \
-Wstrict-prototypes -Wnested-externs -Winline -Werror -g -Wcast-align …Run Code Online (Sandbox Code Playgroud) 我已经开始使用valgrind一天前由SO本身的人建议.它是一个了不起的工具,但今天我遇到了一个问题.它给出了以下错误:definitely lost bytes但无法告诉错误的位置.
这是输出valgrind:
udit@udit-Dabba ~ $ valgrind --leak-check=full sendip -v -p ipv6
-f file.txt -6s ::1 -p ah -as 0x20 -aq 0x40 -ak "yugal" -am xorauth.so
-p udp -us 21 - ud 21 ::2
==12885== Memcheck, a memory error detector
==12885== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==12885== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==12885== Command: sendip -v -p ipv6 -f file.txt -6s ::1 …Run Code Online (Sandbox Code Playgroud) 这是我的简单代码......
#include<stdio.h>
int main()
{
int i=5;
printf("%d %d %d %d %d ",i++,i--,++i,--i,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在gcc上,它输出为"4 5 5 5 5"
但在TC上,输出为"4 5 5 4 5"
我知道在printf语句中,如果是单个表达式,则评估将从左到右,但在正常语句中,它将从左到右.
但是如果printf包含多个表达式,那么评估将在堆栈上,元素将从左到右推入堆栈,但从右到左弹出,这证明TC输出是正确的
请纠正我在哪里错了???
c ×7
gcc ×3
pointers ×3
hexdump ×2
makefile ×2
memory-leaks ×2
arrays ×1
binary-data ×1
binaryfiles ×1
c99 ×1
command ×1
dependencies ×1
dlopen ×1
dos ×1
fwrite ×1
gnu-make ×1
kernel ×1
linux ×1
linux-kernel ×1
malloc ×1
networking ×1
standards ×1
string ×1
sysfs ×1
tcpdump ×1
terminal ×1
turbo-c ×1
valgrind ×1
virus ×1