如何区分两个二进制文件?
我有一个程序的两个版本,版本 1 和版本 2。我在两个版本之间做了少量更改,但遗憾的是没有定期备份,所以虽然我已经获得了版本 2 的源代码,我只有版本 1 的二进制文件。我需要找出我在两个版本之间究竟更改了什么。我尝试创建两个版本的 objdump,然后使用 diff 来查找更改,但这不起作用,因为偏移量不同,因此 diff 认为几乎每一行都已更改。
例如,一行可能bgez v0,4074d0<daemonize+0xd4>在版本 1 中,bgez v0,4073d4<daemonize+0xd4>在版本 2 中。这些是直接从转储文件中复制的 - 您可以看到这两行执行相同的操作,但 diff 无法区分它们。文件太大了,我无法手动检查每一行;如何检测功能更改,同时忽略偏移差异?
为了最大限度地减少延迟(我不关心数据包丢失),我想要UDP最小的接收缓冲区.但是,当我将SO_RCVBUF设置为低于1000(使用setsockopt)时,我的程序永远不会收到任何数据包.我发送的数据报有28个字节的数据,总线上数据包大小为70字节,那么为什么SO_RCVBUF <1000时我什么都收不到?我该如何改变它,以允许更小的缓冲区大小?
另外,是否可以根据数据包数而不是字节数来设置缓冲区?或者有什么方法可以手动清空它吗?
发布了很多非常相似的问题,但它们都是针对 Windows 的 - 我想知道如何(如果可能)我可以让我的 C 程序(以 root 身份运行,在 linux 上)禁用网络接口,以便它不再接收任何数据包。
如果有人能告诉我我需要什么功能来执行此操作,那就太好了,但是如果您可以将我链接到某个地方的示例脚本或教程(示例 gratia)关闭并再次打开网络接口,那就更好了。
我有这个全局配置:
<global>
<models>
<subscriber>
<class>Giftlab_Subscriber_Model</class>
<resourceModel>subscriber_resource</resourceModel>
</subscriber>
<subscriber_resource>
<class>Giftlab_Subscriber_Model_Resource</class>
<entities>
<records>
<table>subscriber_records</table>
</records>
</entities>
</subscriber_resource>
</models>
<resources>
<giftlab_subscriber_write>
<connection>
<use>core_write</use>
</connection>
</giftlab_subscriber_write>
<giftlab_subscriber_read>
<connection>
<use>core_read</use>
</connection>
</giftlab_subscriber_read>
<giftlab_subscriber_setup>
<setup>
<module>Giftlab_Subscriber</module>
<class>Giftlab_Subscriber_Model_Resource_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</giftlab_subscriber_setup>
</resources>
</global>
Run Code Online (Sandbox Code Playgroud)
在我的mysql4-install-0.1.0.php文件中,我需要获取表名.我该怎么做?我知道它是这样的:
$this->getTable('subscriber_resource/records')
Run Code Online (Sandbox Code Playgroud)
但这只会产生异常Can't retrieve entity config: subscriber_resource/records.我需要做什么来检索表名?
我的模块中有一个system.xml,它以这个开头:
<config>
<sections>
<dev>
<groups>
<my_module>
<label>...
Run Code Online (Sandbox Code Playgroud)
我想从不同的模块中获取此标签的值.我该怎么做?我的第一个想法是Mage::getConfig('sections/dev/groups/my_module/label'),但是这不起作用 - 似乎<sections>配置区域无法访问.我也无法弄清楚magento在哪里加载这个值,它必须在某个时候做,或者它无法显示它.
要完全清楚:我没有尝试获取存储在core_config_data表中的配置数据值,这没有问题.我希望能够获得与其相关的其他属性 - 例如组标签或字段的排序顺序,为此我需要能够读取<sections>配置区域.
我有一个页面,里面有一堆 .... 部分。在其中一个中,我完成了一半并决定停止,而不是运行此脚本标记的其余内容 - 但仍运行页面上的其他代码段。有没有办法在不将整个代码段包装在函数调用中的情况下做到这一点?
例如:
<script type='text/javascript'>
console.log('1 start');
/* Exit here */
console.log('1 end');
</script>
<script type='text/javascript'>
console.log('2 start');
console.log('2 end');
</script>
Run Code Online (Sandbox Code Playgroud)
应该产生输出
1 start
2 start
2 end
Run Code Online (Sandbox Code Playgroud)
而不是1 end。
显而易见的答案是将脚本包装在一个函数中:
<script type='text/javascript'>
(function(){
console.log('1 start');
return;
console.log('1 end');
})();
</script>
Run Code Online (Sandbox Code Playgroud)
虽然这通常是最好的方法,但也有不适合的情况。所以我的问题是,如果有的话,还有什么其他方法可以做到?或者如果没有,为什么不呢?
我正在尝试使用 php curl 连接到站点,但收到错误“无通用加密算法”。进一步调查,我认为这与NSS有关?我发现从命令行中,我可以重现错误(所以问题肯定出在 curl 而不是 php 包装器),但是如果我设置了 --ciphers ecdhe_ecdsa_aes_128_sha 那么它就可以工作:
[ec2-user@ip-10-181-165-22 current]$ curl -I https://sslspdy.com
curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
[ec2-user@ip-10-181-165-22 current]$ curl -I --ciphers ecdhe_ecdsa_aes_128_sha https://sslspdy.com
HTTP/1.1 200 OK
Server: nginx centminmod
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
Strict-Transport-Security: max-age=31536000; includeSubdomains
Date: Sat, 07 Feb 1970 22:34:32 GMT
X-Page-Speed: ngx_pagespeed
Cache-Control: max-age=0, no-cache
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,
为什么会这样?我无法在网上找到有关 ssl 密码如何在 curl 中工作的解释;似乎每一页都是在假设读者已经是该领域的专家的情况下编写的——不幸的是,像“你可能正在使用 NSS,所以尝试将 PKCS 切换为 FIPS”这样的句子对我来说是完全无法理解的,谷歌搜索将只解释单个组件(通常参考 20 年前的标准),而不是它们之间的关系。
有什么办法可以让 curl 告诉我它正在尝试哪些密码以及服务器将接受哪些密码?我试过在ssllabs上查找服务器,但似乎是说服务器接受所有密码,但显然不接受。
我需要将哪些选项传递给 …
在laravel中,给定的URL被路由到特定的控制器方法.在该方法中,我想返回响应,就像用户访问了不同的路由一样.我可以这样做:
return App::make('OtherController')->otherMethod();
Run Code Online (Sandbox Code Playgroud)
但是,这取决于我对要发送给它的类和方法名称的硬编码.我更喜欢将它们发送到由路由名称标识的另一个控制器,而不是控制器类的名称.我怎样才能做到这一点?
一种可能性是return Redirect::route($otherRoute),除了a)这是一个实际的重定向,这意味着它增加了页面加载时间并替换了他们看到的URL,并且b)它使得传输POST数据变得困难.所以,我不想这样做.
如何调用控制器,只知道它链接到的路由的名称?
我像这样绑定一个类:
App::bind('Some_Class', 'Other_Class')
Run Code Online (Sandbox Code Playgroud)
因此,对App :: make('Some_Class')的调用将返回'Other_Class'的实例.但是,稍后在脚本中我想恢复它,因此调用make现在将返回原始类.
到目前为止,我尝试过这些:
App::bind('Some_Class', 'Some_Class')
App::bind('Some_Class', NULL)
Run Code Online (Sandbox Code Playgroud)
两者都没有起作用 - 它们似乎导致应用程序存储类的实例,这是不好的,因为我需要能够接受参数.如果在没有参数的情况下调用构造函数,则会触发致命错误.那么,如何撤消绑定?
我甚至尝试过使用反射:
App::bind('Some_Class', function() {
$args = func_get_args();
$app = array_shift($args);
$reflection = new ReflectionClass( 'Some_Class' );
return $reflection->newInstanceArgs($args);
});
Run Code Online (Sandbox Code Playgroud)
它仍然无法正常工作!
在 laravel 4 中,我可以使用 将闭包推送到队列上queue::push(function...),但这在 laravel 5 中不再有效。相反,我似乎必须为要推送到队列中的每个函数创建一个自定义 Job 类。
由于我想要推送的函数只有几行长,并且只在一个地方使用过,所以为每种情况编写一个完整的类似乎真的是浪费时间和空间。
我目前能想到的最好的“解决方案”是要么有一个辅助函数,它使用 PHP 的反射方法在调用时动态生成一个新类,要么有一个接受闭包作为参数的通用作业,即dispatch(new ClosureJob(function(){...}));
这些对我来说似乎不太理想。还有其他方法可以做到这一点吗?或者我必须实施其中之一吗?
php ×5
c ×2
laravel-4 ×2
magento ×2
assembly ×1
binary ×1
buffer ×1
closures ×1
config ×1
curl ×1
decompiling ×1
diff ×1
dispatch ×1
install ×1
javascript ×1
laravel-5 ×1
module ×1
networking ×1
nss ×1
objdump ×1
openssl ×1
posix ×1
queue ×1
sql ×1
ssl ×1
system-calls ×1
udp ×1
unix ×1
url-routing ×1
web-frontend ×1