我们的夜间构建过程已经被打破了很长时间,因此它生成的PDB文件的年龄与相应的图像文件相差几个小时.我已经解决了这个问题.
但是,我想开始使用符号服务器,但不能因为必须使用这些年龄不匹配的pdb文件.我通过在windbg中使用.symopt + 0x40方法解决此问题.这意味着我必须手工组织我的所有pdb文件,经过多年的发布后,这就相加了.
我正在寻找一种方法来修改windbg用于标记pdb年龄的机制,并强制它匹配我的图像文件.实用程序ChkMatch执行类似的操作,但是对于pdb签名.开发人员在页面上声明"ChkMatch能够使可执行文件和PDB文件匹配,如果他们有不同的签名但年龄相同(有关PDB签名和年龄的更多信息,请参阅此文章).如果年龄不同,该工具无法生成文件匹配."
我看了一下hexeditor,甚至找到了与年龄相对应的东西,但它必须在内部拉出一些技巧,因为我无法让它工作.
有任何想法吗?
编辑:我不知道这是否有帮助,但在我的特殊情况下,年龄差异是由于不必要地重新连接dll引起的,这也会重新创建PDB文件.但是,我们的构建过程是存储原始dll(在重新链接之前),以及重新链接之后的pdb.我想过以某种方式手工重建这种情况.意思是,强制重新链接DLL,但在两种情况下都保存了pdb.然后我可以对这两个文件进行二进制比较,看看它们是如何变化的.也许运行某种自动执行此操作的修补软件?通过查看我的控制案例中究竟发生了哪些变化,或许我可以对我公司构建过程中保存的DLL和PDB做同样的事情?
编辑:我想出来!!!! 感谢第一个答案的评论之一,我查看了"未记载的Windows 2000 Secrets:A Programmers Cookbook"一书的pdf链接.作者详细介绍了pdb文件格式.正如我之前所说的那样,我已经将pdb加载到十六进制编辑器中,然后翻出一些看起来我的年龄/签名匹配,但它没有用.好吧,在使用W2k秘密书中的实用程序将pdb"爆炸"到包含的流中之后,我发现它们隐藏了对流3中年龄的另一个引用!!!!!!! 一旦我翻过那个,它在windbg中匹配.这太棒了!!!! 非常感谢....这里的符号服务器我来了!
据我所知,MEM_RESERVE实际上是"免费"内存,即可供我的进程使用,但尚未分配?或者之前已分配,但此后已被释放?
具体来说,请参阅下面的我的!地址输出,我几乎没有虚拟地址空间(99900 KB免费,2307872作为MEM_PRIVATE.但状态显示其中44.75%实际上是MEM_RESERVE.这是否意味着它实际上是免费的,在我的过程...但可能是支离破碎的?
0:000> !address -summary
--------- PEB a8bd8000 not found ----
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
259af000 ( 616124) : 22.29% 23.12% : RegionUsageIsVAD
618f000 ( 99900) : 03.61% 00.00% : RegionUsageFree
13e22000 ( 325768) : 11.78% 12.22% : RegionUsageImage
42c04000 ( 1093648) : 39.56% 41.04% : RegionUsageStack
42d000 ( 4276) : 00.15% 00.16% : RegionUsageTeb
2625d000 ( 625012) : 22.61% 23.45% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
0 ( …Run Code Online (Sandbox Code Playgroud) 我是一个开发人员,从事一个非常大的内存密集型32位应用程序.耗尽虚拟地址空间(内存)对我们来说是个问题.在我调查一些最近的问题时,我注意到IOKit(512MB)保留了大量内存.此内存未分配,但仅保留.进一步调查显示,大多数应用程序(Safari,iTunes等)都保留了这块内存.它似乎保持未分配状态.我正在使用vmmap进行测试.例如,这是使用默认模板使用XCode制作的Cocoa应用程序:
REGION TYPE VIRTUAL
=========== =======
CG backing stores 1008K
CG image 4K
CG raster data 64K
CG shared images 2252K
Carbon 7264K
CoreGraphics 16K
IOKit (reserved) 512.0M reserved VM address space (unallocated)
MALLOC 59.0M see MALLOC ZONE table below
MALLOC guard page 48K
MALLOC metadata 348K
Memory tag=242 12K
STACK GUARD 56.0M
Stack 8712K
VM_ALLOCATE 16.2M
__DATA 8296K
__IMAGE 1240K
__LINKEDIT 31.5M
__TEXT 76.7M
__UNICODE 536K
mapped file 27.4M
shared memory 1320K
=========== =======
TOTAL 809.2M
TOTAL, minus reserved …Run Code Online (Sandbox Code Playgroud) 我熟悉Bonjour在"本地"域名上的广告服务的用法.我已经完成了几个例子,我知道我使用的相应Cocoa类.
我很好奇我如何将一个简单的Bonjour服务宣传到不同的子网.具体来说,我正在尝试编写一个在我的桌面上运行的网络服务,该服务通过以太网连接.客户端在通过Wifi连接的移动设备(iPhone/iPad)上运行.在我的网络设置中,Wifi与以太网位于不同的子网上.但是,两者都落后于防火墙.我没有必要在防火墙外做广告,我只是希望wifi客户端能够看到以太网连接服务器所宣传的服务.
这可能吗?我知道Bonjour应该支持跨子网的通信,但是当我尝试阅读有关此功能的任何时候,它深入研究DNS记录和诸如此类的东西.我是一名应用程序开发人员...我不知道这些东西,我也不想让用户担心它.我错过了一些简单的事吗?
我有一个指向给定类的指针.可以说,例如,指针是:
0x24083094
Run Code Online (Sandbox Code Playgroud)
该指针指向:
0x03ac9184
Run Code Online (Sandbox Code Playgroud)
这是我班级的虚拟功能表.这对我来说很有意义.在windbg中,一切看起来都是正确的.
我删除了指针.现在0x24083094是:
0x604751f8
Run Code Online (Sandbox Code Playgroud)
但它不是一些随机垃圾,每次都会放在那里,它始终如一0x604751f8!这么多,以至于我可以实际使用该地址来确定是否删除了我的应用程序执行之间的指针!
但为什么?它如何确定0x604751f8应该写在那里?
为了记录,我正在使用Windows,在visual studio 2003下构建.
我知道我不能依赖于设定的值,即使它确实看起来是一致的,但我能依靠它不同吗?即,如果指针被删除,0x03ac9184将不会0x24083094,对吗?什么放在那里?它可能是任何东西,但0x03ac9184肯定不会存在(或者我仍然可以调用方法,因为那是虚函数表).我对吗?
我觉得我有答案.删除后不能依赖任何东西.也许一些背景会帮助人们看到我来自哪里.从本质上讲,我正在尝试修复一个错误,指针从我身下被删除.这是一个很长的故事,我不会详细介绍.
基本上,我试图检测到我处于这种情况,所以我可以优雅地退出我的功能.我想最简单和最好的方法是弄清楚谁实际拥有这个指针,然后问他是否有任何改变.所以我要实现这样的修复.它避免了我正在讨论的任何这个C++删除黑客.
然而,有趣的是,在我们的代码中,我们有一个名为"BogusObject"的类,它基本上充当一个托盘,捕捉那些意外取消引用释放对象的人.基本上,我们挂钩我们自己的删除函数,并将BogusObject类bash到任何释放类的vtable中.
然后,如果有人打电话给他们,他们会收到一条好消息说"嘿,有些事情是错的.".这种情况发生在我的情况下.即,0x604751f8+(someoffset)在BogusObject类中. 但是我们不再使用BogusObject了! 它确实没有在任何地方设置(如果我完全删除了BogusObject类,甚至连接正确),但我仍然得到一个好消息说错了!但我现在认为这是巧合.
由于某种原因,运行时0x604751f8在删除它时将该值放在this指针中,而这恰好与一个有类似这样的情况的类相对应!

我想通过在UIImageView中裁剪图像来创建一个新的UIImage.例如,在上面的图片中,我想要一个绿色区域的新UIImage.我找到了执行此操作的代码,通常它看起来像这样(作为UIImage类别):
- (UIImage *)croppedImage:(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
Run Code Online (Sandbox Code Playgroud)
有一个完美的感觉.但是,我的UIImageView在contentMode'aspect fit'中.这似乎使CGImageCreateWithImageInRect的CGRect计算变得复杂,我无法找到正确的解决方案.
我想我需要像对图像一样对绿色矩形应用相同的变换?
另外:我在这里发现了另一个问题(如何在UIImageView中应用适合图像的方面后知道图像大小),这似乎显示了获得大小的蛮力方式,但我仍然不确定如何适应种植情况.
有任何想法吗?
编辑:在我的情况下,我确实有一个如上所示的正方形在UIImageView的叠加视图中绘制.因此,当我意识到我正在裁剪UIImage(在UIImageView中)时,我需要以某种方式更改绿色CGRect,使其"匹配"应用"纵横比较"时完成的转换.例如,如果我将UIImageView保留在"左上角"模式,那么一切正常,因为底层UIImage和UIImageView之间存在1:1的映射."左上角"模式中的问题是整个图像并不总是显示,因为它可能比我的UIImageView更大.
我的问题涉及绘制似乎是徒手的线条的各种技巧:
特别是Steve Hanov发布了这篇优秀的博客文章.
从那以后,我能够使用贝塞尔曲线实现一个漂亮的手绘线算法.但是,我仍然坚持如何实现手绘椭圆.理想情况下,我想给它一个矩形用作边界,类似于其他椭圆绘图调用.但是,我希望它看起来非常写意.
到目前为止,我已经想到了最好的:
- (UIBezierPath*) freehandEllipseFromRect:(CGRect) rect {
// freehand ellipses need a lil more height
rect = CGRectMake(rect.origin.x, rect.origin.y-5, rect.size.width, rect.size.height+10);
UIBezierPath* path = [UIBezierPath bezierPath];
CGPoint topMidPoint = CGPointMake(rect.origin.x + (rect.size.width/2), rect.origin.y);
CGPoint bottomMidPoint = CGPointMake(rect.origin.x + (rect.size.width/2), rect.origin.y+rect.size.height);
// random point along bottom quarter of height, cause makes it look better
CGFloat randomY = (((CGFloat) (arc4random() % RAND_MAX) / RAND_MAX)) * (rect.size.height/4);
CGPoint leftControlPoint = CGPointMake(rect.origin.x-(rect.size.width), rect.origin.y+(rect.size.height-randomY));
// another random y;
randomY …Run Code Online (Sandbox Code Playgroud) 如何使用Github Mantle根据同一类中的另一个属性选择属性类?(或者更坏的情况是JSON对象的另一部分).
例如,如果我有这样的对象:
{
"content": {"mention_text": "some text"},
"created_at": 1411750819000,
"id": 600,
"type": "mention"
}
Run Code Online (Sandbox Code Playgroud)
我想做一个像这样的变压器:
+(NSValueTransformer *)contentJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) {
return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil];
}];
}
Run Code Online (Sandbox Code Playgroud)
但传递给变换器的字典只包含JSON的"内容"部分,因此我无法访问"类型"字段.反正有没有访问对象的其余部分?或者以某种方式将"内容"的模型类基于"类型"?
我之前被迫做过这样的黑客攻击解决方案:
+(NSValueTransformer *)contentJSONTransformer {
return [MTLValueTransformer transformerWithBlock:^id(NSDictionary* contentDict) {
if (contentDict[@"mention_text"]) {
return [MTLJSONAdapter modelOfClass:ETMentionActivityContent.class fromJSONDictionary:contentDict error:nil];
} else {
return [MTLJSONAdapter modelOfClass:ETActivityContent.class fromJSONDictionary:contentDict error:nil];
}
}];
}
Run Code Online (Sandbox Code Playgroud) 我需要使用开发人员配置文件创建iOS .xarchive文件,客户端可以使用其分发配置文件进行重新签名.
(我已经读过这个,但它没有任何真正的解决方案:我如何将iOS应用程序发送到客户端,让他们进行代码签名)
客户不想共享他们的私钥,也不想让我访问会员中心的"开发人员".我们不想分享我们的源代码.
我们需要支持推送通知,因此这意味着我们需要一个完全合格的应用ID.
我无法找到一种方法,允许我构建和导出使用'aps production'签名的.xarchive,'get-task-allow'为false,但也使用与客户端分发证书匹配的证书.
这感觉就像是Xcode中的一个错误,不应该将'aps production'和'get-task-allow'的更改绑定到配置,而不是配置文件的类型?我正在使用'发布',但使用我的开发人员资料.
我错过了什么,或者这是不可能的?
我需要编写一些代码,让我查询m4a文件并提取章节信息.包含:
我做了一些快速搜索,它似乎被Apple视为专有信息?我找到了一些讨论,但大多数是从2005年开始的.此外也有一些类似的问题,但更多的是用章节创建m4a文件,而不是查询.
这只是我必须DIY的东西,因为我没有一个很好的苹果API供我使用?还是我错过了一些明显的东西?
另外,理想情况下,我需要使用我最终用于iPhone的任何技术.
ios ×3
iphone ×2
windbg ×2
windows ×2
bonjour ×1
c++ ×1
cocoa ×1
code-signing ×1
dns-sd ×1
drawing ×1
ellipse ×1
framebuffer ×1
graphics ×1
iokit ×1
json ×1
m4a ×1
macos ×1
memory ×1
networking ×1
objective-c ×1
pdb-files ×1
podcast ×1
pointers ×1
shapes ×1
symbols ×1
uiimage ×1
uiimageview ×1
winapi ×1
xcode ×1