我有一个系统"fsimage.so"需要mkdirp,它恰好存在于libgen.so中.但fsimage.so不知道这一点.例如:
# ldd /usr/lib/python2.4/vendor-packages/fsimage.so
libfsimage.so.1.0 => /usr/lib/libfsimage.so.1.0
libxml2.so.2 => /lib/libxml2.so.2
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
libpthread.so.1 => /lib/libpthread.so.1
libz.so.1 => /lib/libz.so.1
libm.so.2 => /lib/libm.so.2
libsocket.so.1 => /lib/libsocket.so.1
libnsl.so.1 => /lib/libnsl.so.1
libc.so.1 => /lib/libc.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
# ./test
Traceback (most recent call last):
File "./test", line 26, in ?
import fsimage
ImportError: ld.so.1: isapython2.4: fatal: relocation error: file /usr/lib/python2.4/vendor-packages/fsimage.so: symbol mkdirp: referenced symbol not found
# LD_PRELOAD=/usr/lib/libgen.so ./test
Usage: ./test
Run Code Online (Sandbox Code Playgroud)
当然,如果我有源等,我可以简单地再次链接它,并添加"-lgen",它将添加libgen.so作为依赖.
但作为hackery的练习,说我没有任何资源,只是想添加fsimage.so还需要加载libgen.so.使用elfedit/objcopy等,这是不可能的?我不认为我可以使用"ld"来使用.so作为输入,并用额外的库写一个新的.so?
# elfdump /usr/lib/python2.4/vendor-packages/fsimage.so|grep NEEDED
[0] NEEDED 0x5187 …
Run Code Online (Sandbox Code Playgroud) 想象一下用HTML和JavaScript编写的FTP客户端.这部分有效.但如果用户可以"将列表"复制到剪贴板中,那就太好了.事实证明,剪贴板的东西在JS中并不那么容易(此外,列表可能很大).因此,最好是使用生成的列表弹出一个窗口,然后用户可以选择Copy'Paste,或将页面保存到磁盘.
目前我这样做:
my_window = window.open("", "Copy List"); my_window.document.write('<pre>\n'+string+'</pre>'); my_window.document.close();
哪个有效.我得到一个新选项卡,我在"字符串"中生成的列表很好地显示.
但Chrome会禁用/删除"保存页面"选项.如果用户可以保存页面(html或txt),那将是很好的.打开窗口/标签并让它们保存内容需要什么魔力?
由于我们使用WebSockets(key1/key2),因此仅适用于Chrome,无需其他浏览器.
我需要与 Solaris 加密机制 SUN_CKM_AES_CCM 兼容。在 Linux 中,我相信我应该设置一个 AEAD 请求来获取“ccm(aes)”机械。Linux Crypto 的文档似乎相当糟糕,最好的例子似乎是 tcrypt.c 测试和内核源代码。
在 Solaris 上,我对 512 字节的块进行了测试加密,其中包含 16 字节的 hmac 和 12 字节的 iv。这需要保持不变,希望结果是相同的。
但是,我认为应该有效的方法无效;
struct crypto_aead *tfm = NULL;
struct aead_request *req;
unsigned char key[16] = {
0x5c, 0x95, 0x64, 0x42, 0x00, 0x82, 0x1c, 0x9e,
0xd4, 0xac, 0x01, 0x83, 0xc4, 0x9c, 0x14, 0x97
};
unsigned int ivsize;
int ret;
struct scatterlist plaintext[1];
struct scatterlist ciphertext[1];
struct scatterlist hmactext[1];
unsigned char *plaindata = NULL;
unsigned char *cipherdata …
Run Code Online (Sandbox Code Playgroud) 所以我将最新的ZFS移植到OSX(github/osx.zfs
),然后添加了ZVOL,因为它是我想要的东西.现在纯粹的BSD内核方面似乎确实有效,但我遇到了Apple特定集成的问题.我只是错过了一块拼图.
我创建新的虚拟磁盘(ZVOLs)类似于其他Darwin内核例如,通过定义bdevsw
和cdevsw
并调用bdevsw_add
和cdevsw_add_with_bdev
.从这里可以看出:create/dev/zfs,它是主要的ZFS节点并处理所有特定的ioctl.然后在此处创建 ZVOL虚拟磁盘节点create/dev/disk_POOL_name
(我曾尝试命名dev的节点作为disk3
和rdisk3
它没有任何区别).
我处理了我收到的大多数ioctl newfs_msdos
newfs_hfs
newfs_udf
,这里处理ioctl
所以,基本上,它创建了BSD/dev/entries,我可以newfs我的虚拟磁盘,我可以挂载它,使用它.从Unix POV,它似乎作为磁盘工作.
但不是在OSX中.它不会显示在"diskutil list"中,也不会显示在GUI Disk Utility中.显然,我需要在内核中做一些其他事情来考虑它.或者,这是我应该在用户地区做的事情吗?
# ./zpool.sh create -f BOOM ~/pool-image.bin
# ./cmd.sh zfs create -V 50M -o volblocksize=4096 BOOM/vol
# ls -l /dev/*disk*
brw-r----- 1 root operator 1, 3 Apr 9 01:48 disk0s2
brw-r----- 1 root operator 1, 2 Apr 9 01:48 disk0s1
brw-r----- 1 root operator 1, 0 Apr …
Run Code Online (Sandbox Code Playgroud)