我正在阅读一本关于链接器和加载器的旧书,它有目标代码的图像。
但是我不知道用什么工具来显示这些文件的内容。
如果有人能指出该工具,我将不胜感激。
这是目标文件的 C 代码和相应的显示。
源文件m.c
:
extern void a(char *);
int main(int argc, char **argv)
{
static char string[] = "Hello, world!\n";
a(string);
}
Run Code Online (Sandbox Code Playgroud)
源文件a.c
:
#include <unistd.h>
#include <string.h>
void a(char *s)
{
write(1, s, strlen(s));
}
Run Code Online (Sandbox Code Playgroud)
对象代码m.o
:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000010 00000000 00000000 00000020 2**3
1 .data 00000010 00000010 00000010 00000030 2**3
Disassembly of section .text: 00000000 <_main>:
0: 55 pushl %ebp
1: 89 …
Run Code Online (Sandbox Code Playgroud) 我正在学习 Linux。想到了可以将进程附加到终端的想法。将进程附加到终端 (TTY) 是什么意思,我为什么要这样做?
我有一个通过 UDP 连接传输数据的软件。然而,在我们的系统中,我们只能通过串行端口传输数据。我正在考虑使用 UDP 和串行之间建立一座桥梁socat
。不过我对它不是很熟悉。尝试过一些教程,但它们没有帮助。也尝试阅读手册,但也没有帮助。
我在这里找到了一个例子,并根据我的需要进行了调整。这是我的嵌入式系统上的内容(它有一个静态 IP)
$ socat -v udp4-datagram:172.24.176.207:54321 \
open:/dev/ttyS0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
Run Code Online (Sandbox Code Playgroud)
这是我的主机上的内容(也有静态 IP)
$ socat -v udp4-datagram:172.24.176.116:54321 \
open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
Run Code Online (Sandbox Code Playgroud)
你得原谅我,但我总体上是socat
文盲networking
。
一些评论和问题。
open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
意思?我在哪里可以找到它的描述?我明白了/dev/ttyUSB0
和b115200
,但是剩下的是什么?在嵌入式系统(172.24.176.207)上我运行了一个netcat
服务器:
$ nc -ul 172.24.176.207 54321
Run Code Online (Sandbox Code Playgroud)
在主机上我发送了一个 UDP 数据包:
$ echo -n "hello" | nc -4u -w1 172.24.176.207 54321
Run Code Online (Sandbox Code Playgroud)
但什么也没发生。我缺少什么?
从 stackoverflow.com 转移问题 不幸的是,无法从 stackoverflow.com 删除此问题。
我正在尝试通过串行线路在两台 Linux 计算机之间建立 PPP 连接。我按照这些说明进行操作,但没有成功。这两台机器Fedora 28 Linux
位于Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz
一个定制板上,并带有Linux 4.14.0-xilinx-v2018.2
一个ARMv7 A
.
以下是我在机器上得到的命令和输出Fedora
:
$ sudo pppd -detach debug passive lock xonxoff 192.168.10.100:192.168.10.1 /dev/ttyUSB0 9600
[sudo] password for user:
using channel 3
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB0
sent [LCP ConfReq id=0x1 <asyncmap 0xa0000> <magic 0x888f0bcb> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0xa0000> <magic 0x888f0bcb> <pcomp> <accomp>]
sent [LCP …
Run Code Online (Sandbox Code Playgroud) 我有一个带有本地链接地址的 IPv6 设备fe80::204:9fff:fe04:7fb5
(ifconfig 的输出如下)。我的机器有一个地址fe80::d939:2d31:6fe2:c203
。我试图用两种方式(从机器到设备和从机器设备)ping,但我得到的只是Destination unreachable: Address unreachable
(下面提供了确切的输出)。
我花了很多时间查看不同的论坛,试图找出问题所在,但无法找到答案。我还应该指出,我对 IPv6 不是很熟悉。我还对这个主题进行了大量阅读,只是不确定设置是否存在问题。
ifconfig
设备输出:
eth2 Link encap:Ethernet HWaddr 00:04:9f:04:7f:b5
inet6 addr: fe80::204:9fff:fe04:7fb5/64 Scope:Link
inet6 addr: 2001:c001:5afe:b1::e20:d001/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:1898 (1.8 KiB)
Run Code Online (Sandbox Code Playgroud)
ifconfig
我机器的输出:
enp0s31f6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::d939:2d31:6fe2:c203 prefixlen 64 scopeid 0x20<link>
ether 54:e1:ad:92:26:52 txqueuelen 1000 (Ethernet)
RX packets 545 bytes …
Run Code Online (Sandbox Code Playgroud) 我正在使用 PPP 与设备通信。到目前为止,我一直在做的是在我的机器(Fedora 29)和设备(Yocto Linux)上实例化 PPP。然后我打开 TCP/UDP 套接字并与设备通信。我的串行链路(这就是我使用 PPP 的原因)的波特率较低,准确地说是 4800。我无法更改它,这是项目要求。我一直在阅读一些有关 PPP 的内容,据我所知,我不能只是实例化它并直接使用它。我必须使用 TCP/IP/UDP。我对么?换句话说,一旦我建立了 PPP 连接,唯一的使用方法就是打开套接字(UDP 或 TCP)并通过它与设备通信。我不能只创建应用程序级数据包并告诉 PPP 发送它,我必须经过 TCP/IP 层(传输层)。